文字化けの原因を探る

Yahoo!掲示板で文字化け

Yahoo!の掲示板で、 (つなぐ)という文字を入力すると文字化けをするという投稿がありました。「繫」はJIS第1水準/第2水準にある「繋」の異字体でJIS補助漢字に有る文字です。

(注)JIS第1水準/第2水準 1978年にコンピューター用の漢字(文字)コードのJIS規格、JIS C6226というが制定されました。これに採用された文字は、使用頻度に従ってJIS第1水準と第2水準に分けられています。その後この規格はJIS X0208という規格になりました。

JIS補助漢字(JIS X0212)は、JIS第1水準/第2水準(JIS X0208)の文字を補完するために1990年に定められた文字コードの規格です。

さて、実際にこの字を含む文章をYahoo!掲示板に投稿しても、文字化けしません。

写真はXP SP2 Firefox1.5上での表示のスクリーンショット、右側が問題の「繋」ぐです。

(なお、下の1-23-50というのはJIS X0213(最新の規格)で使用されている面区点コードです。U+7E4BはUnicodeの文字コードです。他も同じです。)

 XP SP2 Firefox 1.5で表示 (MozillaFirefoxで投稿したものを、MozillaFirefoxで閲覧した例)

 待てよ!もしかして、Firefoxで見ているので文字化けしないのかな?と思い、インターネットエクスプローラー(IE)で確認してみると案の定 右側が文字化けしています。

XP SP2 Internet Explorer6で表示(MozillaFirefoxで投稿したものを、IEで閲覧した例)

本当は、こう繋見えないといけません。

うーん、何でだろう?Yahoo!の掲示板が文字コードにEUC-JPを使用しているせいでしょうか?

(注)日本語のWEBサイトで使用されている日本語の文字コードは主に、Shift_JIS、EUC-JP、ISO-2022-JPがあります。また日本語の文字コードではありませんが、Unicodeのエンコードの1形式であるUTF-8も使用されています。

Unicodeは日本の漢字だけでなく、中国や台湾、韓国の漢字、ハングル、タイ文字、アラビア文字などを一緒に表示しようという文字コード体系です。

そのページがどの文字コードを使用しているかは、IEの場合は「表示」-「エンコード」で確認できます。なお、IEはISO-2022-JPを「日本語(JIS)]と表示しますが、これは間違 った用法です。

EUC-JPは補助漢字に対応しているはずだけどなあ、と調べてみたらウィキペディアに次の記事がありました、

EUC-JPには亜種が存在する。

つまり、EUC-JPの実装にはいろいろ種類があり、IEのそれは補助漢字には未対応だったのです。「繫」はYahoo!のサイトでは 8F D4 DAと1文字が3バイトでエンコーディングされます。第1水準/第2水準の文字はYahoo!のサイトでは1文字2バイトでエンコードされます。IEは3バイトでエンコードされた補助漢字の文字を正しく判定できないので しょう。道理で文字化けするはずです。

エンコード違いのサンプルファイルを作ってみました。下のURLをクリックすればジャンプします。表示の違いをご確認ください。

./eucjpsample.html  (EUC-JPでエンコードされたページ) IEで見ると該当の文字は文字化けします。
./sjissample.html   (Shift_JISでエンコードされたページ) 該当の文字は直接表示できません。数値文字参照形式を使用すれば表示できます 。
./utf8sample.html   (UTF-8でエンコードされたページ) 該当の文字をIEで見ても文字化けしません。


次期版のWindowsであるWindowsVistaのβ2版(テスト版)上のIE7でも同じ文字化けをしました。マイクロソフトはこの仕様を変える気がないようです。

なお、サンプルページを見ていただければ分かりますが、EUC-JPサイトでも数値文字参照を使用すれば文字化けは起こりません。

(注)数値文字参照はその文字コード体系で表示できない文字をWEBサイト上で表示する方法です。「&#x7E6B」 このように&から始まる文字列で、1文字を代替します。ただ残念なことにYahoo!掲示板ではこの方法での入力は受け付けてくれません。

(2006/6/17 記)(2006/7/31 (注)追記+変更)


ページ全体の文字化け

Yahoo!掲示板への書き込み、シオシティーズのWEBページ作成ツール(アドバンストHTMLエディタ)の利用時に、 インターネットエクスプローラー(IE)を使用し、その文章中に補助漢字(NEC特殊文字、IBM拡張文字/NEC選定IBM拡張文字にあるものを除く)があると、 アップロードした文章全体が文字化けします。

MozillaFirefoxを使用してアップロードした例 (この場合でもIEで閲覧すれば該当文字とその後1文字程度が文字化けしてしまいます。)
IE6.0を使用してアップロードした例 (MozillaFirefoxで閲覧してもページ全体が文字化けします。アップロード時にすでに文字化けしている物と思います。)

すなわち、IEで補助漢字を含んでいる文字をYahoo!の掲示板に投稿すると、そのページ全体が文字化けしてしまいます。これは投稿時にそのようにIEが書き込んでしまうのです。従って このページを他のWEBブラウザで閲覧してもページ全体が文字化けしてしまいます。

WEBブラウザにMozilleFirefoxを使用して投稿すれば、このようなことは起こりません。ただしそのページを後でIEで閲覧すると、補助漢字とその次の文字が文字化けして表示されます。

(注)Shift_JISコードは原則としてJIS第1水準/第2水準にある文字しか使用できません。ただしWindowsは昔のPCとの互換性のためNEC特殊文字、およびIBM拡張文字/NEC選定IBM拡張文字という規格外の文字を含みます。

これらの規格外の文字の中にはその後JIS補助漢字に採用されたものもあります。その文字は、Yahoo!掲示板にIEで投稿してIEで閲覧しても文字化けはしません。

(この項 2006/7/29 追加)(2006/7/31 (注)追記+変更)

参考資料:JIS補助漢字とWindowsの特殊文字

JIS補助漢字(JIS X 0212)(全コード表)

Windows-31J の文字セット

なお、メモ帳に入力した文章を、文字コード「ANSI」で保存しようとして「Unicode形式の文字を含んでいます」と警告されれば、そこに含まれる文字を含んだ文章をYahoo!掲示板にIEを使って投稿すると文字化けします。

(なお、この場合文字コードに「ANSI」という用語を使うのは誤用です。)

(この項 2006/7/30 追加))(2006/7/31 追記)


Windows Vista(β版)で不思議な現象が

確認のためVistaβ2上のIE7で上のページを見ているときにおかしなことに気がつきました。UTF-8でエンコーディングされたページとShift_JISでエンコーディングされたページで「繫」の表示フォントが違うのです。上はUTF-8、下がShift_JISです。

Vistaベータ2 IE7 UTF-8のサイトを見る

Vistaベータ2 IE7 Shift_JISのサイトを見る

ソースを見ていただければ分かりますが、ソース上でFONT指定はしていません。IE7のFONTの設定も特に特殊なことはしていません。

またひとつ不思議なことがありました。悩んでしまいます。

Vistaベータ2 IE7フォント設定

(2006/6/17 記)


「メニュー」に戻る

「レジにて半額 Yahoo出張所」トップページに戻る

「レジにて半額」トップページに戻る