« 秀丸エディタとEUC補助漢字(「繋がる」と「繫がる」) | トップページ | Mac版IEとinnerHTML »

2006/11/09

IE7と補助漢字(「森鴎外」と「森鷗外」)




繋   繫

前回、「秀丸エディタとEUC補助漢字(「繋がる」と「繫がる」)」で書きましたように、 IME2007(β版)で「つながる」を漢字変換すると、

左のように、二つの漢字候補が表示されます。それを拡大したものが上記の漢字です。片方の「繫がる」は「環境依存文字(Unicode)」と表示されます。このブログはUTF-8のため、問題なく、二つの漢字を表示することができます。

しかし、IME2003の場合、「環境依存文字(Unicode)」とか表示されませんので、ユーザーが意図せずに、補助漢字の方の「繫がる」を使ってしまう可能性があります。

<<補助漢字をサポートしているアプリケーションは、実際のところ少ない。>>
この補助漢字(JIS X 0212-1990)は、天下の秀丸エディタがver. 6.0になってやっとサポートするようになったことからも分かりますように、サポートしているアプリケーションは、現在のところ少ないです。

例えば、Firefoxではサポートしていますが、IEではIE7になってもサポートされていません。せっかく秀丸エディタでEUC-JPの補助漢字をサポートするようになっても、IEでは文字化けします。「繫がる」が「恕リがる」にIEでは文字化けします。明治の文豪・「森鷗外」は「森乗ス外」に文字化けします。

さらに、同じ秀丸でも、補助漢字をサポートしていないバージョンで開くと、文字化けします(文字化けの仕方はIEとは異なり、「xs擇・觴」といように、後続する平仮名・タグの一部を含む「全面文字化け」になります。)。

(全くの余談ですが、この「恕」の読みや意味がわからなかったので調べました。「ジョ」と読み、「相手の立場にたってゆるす、思いやりの心」という意味で、孔子様の言葉にあるようです。私は長い間、字の雰囲気・つくりが、「怒」に似ているので、悪い意味に捉えていました。お恥かしい。

お話を元に戻しますと、「恕」はEUC-JPで「0xBD FA」です。半角カタカナの「リ」は、「0x8E D8」です。一方、「繫」は「0x8F D4 DA」です。「乗」は「0xBE E8」、半角カタカナ他の「ス」は「0x8EBD」です。一方、「鷗」はEUC-JPの場合、「0x8F EC BF」です。前回の記事で書いたバイナリーエディタでのプレビュー文字化けと違って、その文字化けのアルゴリズムはよく、わからないですね。恐らく、いったんunicodeに内部的に変換されてから再びEUC-JPに変換される際の不具合ではないかと推測しているのですが・・・。いまいちよく分からないです。

いずれにしても、IE6及び最新版のIE7では文字化けします。また、Opera9.02()でも、右のように文字化けします。ダイヤの形の中に「?」が表示されます。補助漢字のバイトコードが処理不能な文字と認識しているのなら正しい処理と言えます。ところが、Firefoxは1.5xでも2.0、Netscape 7.1などMozilla系ブラウザでは、文字化けせずに、EUC-JPでも、「繫がる」(補助漢字)と「繋がる」の両方を区別できるようになっています。Safariでは、ページ全体がShift_JISのページであると誤判定されて文字化けしたものの、手動でエンコーディングを「EUC」に変更すれば、補助漢字の方の「繫がる」も文字化けせずに表示されました。

 Opera 9.5で補助漢字もサポートされるようになりました。

それでは、IE上のフォーム(EUC-JPでエンコードされていることが前提。)で補助漢字の「繫」をユーザーが入力した場合、どのようにURLエンコードされるのかといいますと、「%26%2332363%3B」になります。これを逆にURLデコードすると、「&#32363;」になります。つまり数値参照に変換されています。「&#32363; = 『繫』」です。

つまり、先月書いた記事「Mac版Operaと半角円マーク」でMac版Operaが半角円マークを「&#165;」として処理する問題で書いたのとよく似た現象が起こります。

▼ 想定される問題
  • FirefoxやNetscape 7.1でEUC-JPでエンコードされたページにアクセスし、フォーム上で入力した「繫」「森鷗外」は、仮にデータベース上に正しく登録されたとしても、それを取り出し、他のユーザーがWindows版IEをはじめとするその他のブラウザで見た時に、ことごとく文字化けして見えます。

  • とくに、入力している本人は、Firefoxで文字化けしないので、Windows版IEなどで文字化けしているかもなどとは、ほとんど気づくことはないでしょう。特に、前述のように、IME2003以前を使っている場合には、相当の知識がある人でなければ、「繫」が使用を控えた方がいい文字だとは気付かないでしょう。丸数字などは使わない方がいいと分かっていても・・・。

  • Windows版IEやOpera(Windows、Mac)で入力した「繫」は、フォーム送信時に数値参照文字に変換されます。しかし、多くのWEBアプリで、エスケープ処理がサーバ上でなされるため、その結果「&#32363;」という文字がIEやFirefoxで表示されます。「繫」が表示されることは稀です。あるとすれば、セキュリティを考えていない欠陥システムか、もしくは、逆に、数値参照文字を適切に処理する非常に優れたシステムかどちらかです。

  • 前述のように、SafariではEUC補助漢字の「繫」「森鷗外」を一応正しく表示できますが、フォームが絡んでくると駄目です。ユーザーがEUCでエンコードされたページ上で入力した「繫」(Mac Tigerでどのように入力するかというのはまだテストできていませんが、とりあえずコピー&ペーストでテスト)や「森鷗外」の「鷗」は、送信時には「%3F=『?』」にエンコードされます。Safariでは基本的にEUC-JPの補助漢字をサポートしていないと考えていいでしょう。
結局、IEで補助漢字をサポートされるのを待つか、EUC-JPでエンコーディングしたページなんかやめてしまって、UTF-8に全面移行するしかないのかもしれません。



【BB.excite】Bフレッツ 工事費・接続料無料キャンペーン実施中!

マイクロソフト社にいるIEの開発者は、もしかしたら「さまざまなWEBアプリにおいて、数値参照文字を正しく処理できないところ(過剰なセキュリティ対策)に問題があるだけで、自分たちの処理に問題はない」と言うかもしれません。「自分たちが補助漢字をサポートするようになっても、結局、補助漢字に対応していない他のブラウザ・WEBアプリで、(その漢字の部分だけでなく、下手するとページ全体の)文字化けを引き起こしかねない。「&#32363;」とその漢字の部分だけが数値参照文字の『できそこない』になるぐらいの方がかわいい。」「Firefoxの方こそ、補助漢字の妙なサポート(どうせ中途半端になるサポート)はよしてほしい。」と反論するかもしれません。

実は、私の中では、IEの仕様とFirefoxの仕様と、どちらの仕様があるべき姿なのかよく分かりません。WEB上でいろいろ調べましたが、結論が出ませんでした。Mac版Operaが半角円マークを「&#165;」としてエンコードするのは駄目と書きましたが、この問題は微妙です。ここまで来ると、WEBアプリ側でどちらのエンコード方法で送信してきても大丈夫なように処理するしかないように考えています。そこまでやるのは面倒なので、実際にはする気が起きないのですが・・・。

この問題を考える上で、役に立つであろうサイトをいくつかご紹介します。ともすれば、文字コードの問題は形而上学的というか法廷論争的というか議論が白熱しがちであり、少々読むのに力がいるものが多いのですが、下記のサイトは、この問題を理解するうえで役立つと思います。

● プロジェクト「セーブ・ザ・鷗外」
http://mkosaki.blog46.fc2.com/blog-entry-154.html

● IEがEUCのJIS X 212をサポートしていないのは規格違反なのか
http://mkosaki.blog46.fc2.com/blog-category-10.html

● FirefoxのEUCの独自拡張のセンスが最低な件について
http://mkosaki.blog46.fc2.com/blog-entry-158.html

● Bug 4873 - EUC-JPエンコーダは補助漢字を変換すべきではない
http://bugzilla.mozilla.gr.jp/show_bug.cgi?id=4873

● JIS補助漢字(JIS X 0212)(全コード表)
http://www.asahi-net.or.jp/~AX2S-KMTN/ref/jisx0212/index.html

● [mysql 12371] Re: MySQLの eucjpms と IE の EUC-JP
http://www.mysql.gr.jp/mysqlml/mysql/msg/12371

● [pgsql-jp: 35194] Re: IBM拡張文字の扱いについて
http://ml.postgresql.jp/pipermail/pgsql-jp/2005-April/018754.html

● rimk Diary(2005-05-07)「PHP-Tips: 漢字コード CP51932 eucJP-win」
http://rimk.tdiary.net/20050507.html

● eucJP-ms と CP51932 の違い
http://msyk.at.webry.info/200511/article_2.html

今回、IE7でEUC-JPの補助漢字への対応が見送られた(ハナからマイクロソフト社は対応するつもりがない? 「WindowsにおけるEUCとはCP51932のことであり、補助漢字は含まない」というポリシーは永遠に不滅なのかもしれません。WindowsがWindowsである限り)理由ははっきりとは分かりませんが、メジャー中メジャーなブラウザIE7で未対応な漢字であり、補助漢字いわばハングル文字とかと同じ扱いですね。進歩的なFirefoxでありながら、Firefoxユーザーは依然として肩身の狭い思いをするかもしれません。

結局、Windows版Firefoxが補助漢字をサポートしているのは、OSの「行き届かない」点をカバーする孝行息子なのか、異端児・問題児なのかは考え方次第なのでしょうが・・・。



【格安パソコンなら!ソーテックオンラインショップ!】

|

« 秀丸エディタとEUC補助漢字(「繋がる」と「繫がる」) | トップページ | Mac版IEとinnerHTML »

コメント

http://support.microsoft.com/kb/412284/ja
-> 日本語拡張文字の表示に関する制限
をご覧ください。
 すでに、Windows 98 の時代に「CP932 外の文字は Unicode で対応」って事になっていましたね。
 Firefox の EUC-JP は JIS X 0212 をサポートしているように見えて、POST 時に NEC選定IBM拡張文字と JIS X 0212 の両方で定義されている文字は、NEC選定IBM拡張文字のコードポイントを使うという罠があるので注意が必要です。
 ちなみに、マイクロソフトは、JIS X 0213:2004 対応に関して、これ以上、日本語のコードページを追加しない事を明言していたと記憶しています。
 Windows 98 の頃のアナウンスと合わせて考えると、Windows では EUC で JIS X 0212 を扱えるようにする事は無いと考えるのが妥当かと思います。
 そうそう、Windows の CP50220 は JIS X 0212 のエスケープシーケンスを受け取りますが、JIS X 0208 として処理してしまうので、ご注意ください。これは、バグだから直せという事は言ってもいいでしょうね。(こっそり、Vista で直っていたりして…)

投稿: moriyama | 2006/11/09 20:13

はてなアンテナは、ISO-2022-JP で補助漢字を送信するんだ。

Content-Type: text/plain;charset=iso-2022-jp

IE7^[$B$HJd=u4A;z!J!V?92*30!W$H!V?9^[$(Dl?^[$B30!W!K^[(B
^[$B=(4]%(%G%#%?$H^[(BEUC^[$BJd=u4A;z!J!V7R$,$k!W$H!V^[$(DTZ^[$B$,$k!W!K^[(B
IE7^[$B$N0u^[(B

Thunderbird (Linux)
---
IE7と補助漢字(「森鴎外」と「森鷗外」)
秀丸エディタとEUC補助漢字(「繋がる」と「繫がる」)
---

Outlook Express (Win2000)
---
IE7と補助漢字(「森鴎外」と「森貎外」)
秀丸エディタとEUC補助漢字(「繋がる」と「壓がる」)
---

投稿: moriyama | 2006/11/10 02:08

「鷗」が「乗ス」に化けるメカニズム
IE は Unicode で文字を表示しています。
ですので、EUC を Unicode に変換します。
Windows の EUC は、CP51932 ですが、これは EUC を SJIS に変換してから、CP932 → Unicode という変換を行っていると推測されます。
で、EUC の「鷗」は、8f ec bf ですが、最初の 8f は SJIS に変換できないので、そのまま残します。
次に、ec bf を EUC -> SJIS 変換すると e6 bd になります。
8f e6 bd を CP932 -> Unicode 変換します。
そうすると、次のようになります。
U+4E57 (乗) U+FF7D (ス)

投稿: moriyama | 2006/11/10 03:05

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/67411/12620659

この記事へのトラックバック一覧です: IE7と補助漢字(「森鴎外」と「森鷗外」):

» 「[區鳥]」が「乗ス」に化けるメカニズム [コードページ932]
IE7と補助漢字(「森鴎外」と「森外」): WEBプログラミング NOW! 補助漢字をサポートしているアプリケーションは、実際のところ少ない。 この補助漢字(JIS X 0212-1990)は、天下の秀丸エディタがver. 6.0になってやっとサポートするようになったことからも分かりますように、サポートしているアプリケーションは、現在のところ少ないです。... [続きを読む]

受信: 2006/11/11 17:29

» あなたの名前はきちんと登録されているか [ぱふぅ家のホームページ]
あなたの名前はきちんと登録されているか【更新】デザインを一新し、参考書籍と参考サイトを追加 [続きを読む]

受信: 2017/02/12 18:54

« 秀丸エディタとEUC補助漢字(「繋がる」と「繫がる」) | トップページ | Mac版IEとinnerHTML »