中国語の文字コード

百度で仕事をしていると、中国側のスタッフとも頻繁にメールのやりとりが発生します。すると、中国語のメールを受け取ることも多いです(日本語・中国語両方わかるスタッフが、僕に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は日本語が表示できてしまう、というのはなかなか凄いのだけど、ちょっとややこしいことにもなっている、という話でした。