文字化けシミュレータ
Shift-jis/euc/utf-8の文字化けをシミュレートする豆スクリプトです。
設置例は
こんな感じです。
ダウンロード向けのzipファイルを作りました。
ご自由に設置してみてください。
- mojibake.zipをダウンロード
- 全てのファイルを展開してサーバに転送します
- 中にあるcgi-lib.plとmojibake.cgiを実行可能にします (FFFTPなどで755に設定するなど)
- index.htmlにアクセスします。
Webアプリの鬼門
文字化けはphpやサーブレットといったwebアプリで起こるイヤな問題です。
問題は世の中のwebページに4種類の文字コード(iso-2022-jp, shift_jis, euc-jp, utf-8)
があり、また色んなソフトがおせっかいな変換をしてくれたり、しなかったりすることです。
ここでは文字化けが起こったとき、何が起こっているのかを調べるヘルプを書いてみます。
なぜ文字化けが起こるのか
パソコンではデータは全て数字の列で表されています。"a"という文字は数値で97(16進数で0x61)と表します。これをAsciiコードと呼び、これを用いないコンピュータはまずありません。
しかし、日本語の"あ"という文字をどう表現するかは以下のように分かれています。
| utf-8 |
shift_jis |
euc-jp |
| e3 81 82 |
82 a0 |
82 a0 |
(e3とか82とかは16進数ですが、特に16進法だということを意識する必要はありません。)
だから、「ああ」とutf-8で書いた文字列を無理矢理shift_jisで読もうとしても、それは「ああ」とは読めません。「ああ」(utf-8)という文字列は
e3 81 82 e3 81 82
となりますが、これはshift_jisでは
縺ゅ≠
読めてしまいます。なぜなら"縺"の文字コードが e3 81, "ゅ"の文字コードが 82 e3, "≠"の文字コードが 81 82だからです。
euc-jpでは該当するコードが無いため、???や空白ななってしまいます。
この問題をまとめると、世の中にはshift_jisの文字列、euc-jpの文字列、utf-8の文字列の3種類のデータがあり、また表示装置(ブラウザやエディタ)にもshift_jisの表示器、euc-jpの表示器、utf-8の表示器の3種類があります。全部で3x3の9通りの組み合わせがあり、このうち3種類が正解です。他の場合(shift_jisを無理矢理eucとして表示した場合など)は文字化けを起こしてしまいます。
文字化けシミュレータ (with Ajax)
実際に文字化けがどんな風に起こるかシミュレートしてみるスクリプトを書きました。
下のフォームに元データを入れて送信すると、エンコーディングの誤りにより文字化けが起こる様子が見られます。
(要JavaScript)