mizuno_takaakiの日記

テクニカルライター水野貴明の日々の雑感を記した日記

アクセス解析でホームページの集客を極める本  詳解RSS  Googleまるごと使い倒しガイド―Web検索だけじゃない!  俺流amazonの作り方―Amazon Webサービス最新活用テクニック  Googleのすべてがわかる本  Webアプリケーションテスト手法  JavaScript: The Good Parts  ウェブアプリケーションのためのユニバーサルデザイン  入門 自然言語処理 

2008-02-03

[] 中国語の文字コード 00:46

百度で仕事をしていると、中国側のスタッフとも頻繁にメールのやりとりが発生します。すると、中国語のメールを受け取ることも多いです(日本語・中国語両方わかるスタッフが、僕にCCして中国語でメールを出す場合など)。ThunderBirdは別に中国語だって表示できるし問題ないのですが、中国語(簡体字)の文字コード(GB2312)の場合は、ちょっと見慣れないフォントになります。Windowsだと「MingLiU」というフォントです。そこまではいいのですが、中国にも日本語ができるスタッフが何人もいて、彼らとメールでやりとりをしていると、そのフォントで、なおかつ日本語で書かれたメールが来るときがあります。時には、中国語と日本語が両方書かれていることもある。UTF-8なのか?と思ったけど、その場合はフォントが変わるし、文字コードを調べてもGB2312になっているのに、日本語が表示されていて、なんでだろう、と思ってました。

で、ちょっと調べてみたら、実は中国語(簡体字)で現在よく使われている文字コードはGB18030という文字コードで、これはGB2312の上位互換なんだけど、Unicodeとも互換性があるコードであることがわかりました。でも、日本語が表示できるのは、Unicode互換だからじゃありませんでした。GB2312とGB18030の間にはGBKという文字コードがあって、それはUnicode 1.1で策定されていた日本語や韓国語を取り込んだ文字コードだったのです。Windows 95でも採用されていて、CP936という名前で呼ばれているそうな。簡単に言うと、「中国で普段使われている文字コードはUnicodeじゃないけど、普通に日本語も表示できる」ということになるんですね。これは知らなかった。

と、ここまで野望新年会でしゃべったんですが、その後サイボウズラボの秋元さんと百度正式リリース意見交換会でお会いしたときに話をしたら、GB18030の利用は、国によって決められているんだ、という話を聞き、びっくりして調べたところ、本当にそうだったです。

GB18030は中国の文字コードの主流を占める規格になることが規定されています。それは、2001年元旦より「国内の文字情報処理製品が規格の採用を義務づけ」 ているからにほかなりません(実際にはその年9月まで延長されました。)。この規格に準拠していないコンピュータ関連商品を販売することが実質的に不可となっています。

文字コード入門―中国の文字コード―

なるほどー。

ちなみに、Unicodeとの互換部分は4バイトで表すそうな。GBKやGB18030におけるひらがなやカタカナは、EUC-JPと同じコードになっています。たとえば「あ」はどちらも「A4A2」です。だから、これらの文字コードを使い、しかも日本語で書かれているデータを、日本語文字コードを自動判別するようなテキストエディタで開くと、EUC-JPと判断されて、ひらがなカタカナは読めるんだけど、漢字は全部化ける状態になります(漢字は互換性がない)。中国出張中に、GB18030で書かれたテキストデータをメールでもらうことがあって、そのときはまだよくこのあたりがわかって無くて、「おいおいよめねーよ」と文句を言ったら、そんなことはない、読めるだろ、みたいなことを言われて(中国のエディタなら読めるわけで)、押し問答になったんだけど、いろいろ調べてようやく変換できるようになりました。文字コードさえわかれば、PerlならEncodeでちゃんと変換できるわけです。

中国の人たちはGB18030を無意識に使ってるし、逆に日本でもテキストデータは気を抜けばShift_JISになってしまうんだけど、やっぱりUTF-8を使うよう意識しないとだめだなあ、と思いました。メールも。こちらのメールも、油断するとIS-2022-JPになってるから、意識してUTF-8で送るように設定しました。

GB18030は日本語が表示できてしまう、というのはなかなか凄いのだけど、ちょっとややこしいことにもなっている、という話でした。

通りすがり通りすがり 2014/09/09 11:33 古い記事に対するコメントで恐縮ですが、「中国の人たちはGB18030を無意識に使ってる」というのが良く分かりませんでした。

Windowsで主に使われているのはGBK(CP936)ですし、GBKにはUnicodeのCJKが取り込まれているため日本語も扱えます。上位集合だからといってGB18030(CP54936)が使われているというわけではないはずですよ。