EUC-JPのページにおけるWindows外字がめんどくさいことになっている件

  • EUC-JPのページにおけるWindows外字の扱いが、ややこしいことになっている。まあ、もともと外字なので化けることがあるのは当然とも言えるのだけれど、化け方のバリエーションが豊富で、どういう理屈で化けているのかがわかりにくい。以下、はてなmixiで目に付いた文字化けについて、ざっとまとめてみようと思う。
  • はてなダイアリーの詳細編集画面で、FirefoxまたはChromeから「﨑」という字を入力して「確認する」ボタンを押すと、「粼」に化ける(下図)。


  • これは、はてなのサーバがCP51932のNEC選定IBM拡張文字領域をJIS X 0213と見なした上で補助漢字に変換しているためだが、へんな仕様だと思う(下図)。たぶんPerlのEncodeモジュールでEUC-JPをUnicodeに変換した上でEUC-JPに戻しているのだろう*1


  • mixiの日記でMac OS XSafariから「﨑」を入力すると、豆腐に化ける。Safariで豆腐に見えているこの字は、Firefoxでは「凬」と表示される(下図)。


  • 前回のエントリで述べたように、SafariにおけるIBM拡張文字の扱いは謎の独自仕様だが、mixiのサーバはこれをeucJP-msIBM拡張文字と見なした上でCP51932のNEC選定IBM拡張文字に変換しているようだ(下図)。


  • はてなダイアリーの詳細編集画面でSafariから「﨑」を入力して「確認する」ボタンを押すと、「紾」に化ける(下図)。


  • これは、Safariの謎仕様とはてなの謎仕様、2つの原因が重なった文字化け(下図)。


  • はてなダイアリーの「その場編集」画面でSafariから「﨑」を入力して「保存」ボタンを押すと豆腐に化けるが、これはFirefoxからは「﨑」に見える(下図)。


  • この場面では、はてなのサーバは、Safari独自のIBM拡張文字を理解した上でCP51932のNEC選定IBM拡張文字に変換しているように見える(下図)。(括弧内追記。コメント欄でえむけいさんより『「その場編集」モードで化けないのははてなIBM-eucJPを解釈しているからではなく、ブラウザがUTF-8で送信しているからのようです』とのご指摘がありました)



  • ちょっと前にkoikekaishoさんから「﨑がSafariで豆腐になるんだよね」という話を聞いたのをきっかけとして、検証したりしているうちに話がふくらんでしまったエントリ。結論としては、EUC-JPのページにおけるWindows外字は数値文字参照で表現するのが安全だと思う。

*1:PerlのEncodeモジュールについては、twitterで@nalshさんからご教示いただきました(http://twitter.com/nalsh/status/43276900684005376)。ありがとうございます。