前回は「文字コード」を中心にお話ししました。今回は「じゃあ、具体的にどーなってんの」ということを話したいと思います。
前回も使用した「あ」という文字を例にとります。
今まさにPC画面上で文字「あ」が表示されているわけですが、大まかに言って、PCでは次のような処理が行われているはずです。
インターネットからページを取得する
↓
取得したデータを指定された文字コードでデコード(復号化)する
↓
デコードしたデータ(文字)を画面に表示する
このブログのエンコードは「UTF-8」が指定されているため、異なる文字コードでデコードすると「文字化け」になります。つまり、取得したデータは「あ」という文字ではなく「E3 81 82」というデータであるということです。前回秀丸の「文字コード表示」(下図)で文字コードを確認しました。
これを、実際にテキストエディタを使って再度確認したいと思います。
まず、エディタに「あ」と入力します。
これを「シフトJIS」(秀丸での表記は「Shift-JIS」)、「JIS」、「ECU」、「UTF-8」、「UTF-16BE」という異なる5つのエンコード形式で保存します。
ファイルがどのように保存されているか、バイナリエディタを使って調べてみます。
シフトJIS形式で保存したファイルをバイナリエディタで開きます。
画面の左側に「82 A0」、右側に「あ」と表示されています。(実際にファイルに保存されているのは左側のみです。右側はデータをテキスト表示したものです。)
文字コード表示の「0x82A0」と同じですね。また、このファイル長(バイトサイズ)は2バイトであることが分かります(ディスク上でのサイズとは異なります)。シフトJIS形式では「あ」という文字に2バイト使用しているという意味です。
バイナリエディタというものを使用していますが、これは悪事… いや、解析をするために使うものです。バイナリエディタでファイルを開くと、ファイルの生データを見ることができます。
「テキストファイルなのにバイナリエディタで開くの?」と思われるかも知れません。確かにファイルには「テキストファイル」と「バイナリファイル」の2種類がありますが、どちらもデータそのものはバイナリで保存されています。この2つのファイル形式については後でしっかり説明する予定です。
秀丸のバイナリモード
データを直接操作するにはバイナリエディタは強力なツールですが、一般ユーザーが使用することはありませんので、わざわざ入手する必要はありません。幸いなことに、秀丸エディタにもバイナリモードがあります。
先程保存したファイルを通常の方法で開くと、どのファイルも同じように「あ」が表示されるはずです。
開いているファイルのエンコード方式を確認するには、メニューで [ファイル] > [エンコードの種類] の順に選択します。
これで、ファイルのエンコード方式が分かります(上図では「日本語(Shift-JIS)」が選択されています)。ここでエンコードの種類を変更すると文字化けします。
次に、秀丸エディタをバイナリモードにします。
メニューで [その他] > [コマンド一覧]の順に選択します。
表示されたメニューから [ファイル系] を選択します。
サブメニューから [バイナリモード] を選択します。
各ファイルの表示が次のように変わります。
【シフトJIS形式】
【JIS形式】
注:最初の図のように秀丸の「文字コード表」では「0x2422」になっていましたが、ここでは「1B 24 42 24 22 1B 28 42」となっています。JIS形式ではエスケープシーケンスと呼ばれる特殊な文字の並び(ここでは「1B 24 42 」と「1B 28 42」)により文字コードを識別しているためです。「あ」の文字コード(「24 22」)がエスケープシーケンスに挟まれていますね。
【ECU形式】
【UTF-8形式】
【UTF-16BE形式】
エンコード形式によって「あ」という文字データがまったく異なる値で保存されていることが分かると思います。適切でないエンコード形式で保存または読み込みをすると文字化けが発生する理由がこれです。
まとめ
今回は前回説明した文字コードやエンコードについて、具体的に確認しました。重要なのは次の2点です。
- 文字は文字コードで保存される
- エンコードの種類によって値が異なる
これで、PCにおける文字とはどういうものかがなんとなく理解できたでしょうか。
文字については次回で一旦終わる予定です。
では、また。
修正・追記:オレンジのハイライト部。表記を「シフトJIS」に統一しました。
文字をバイナリで変換できると、逆引きにも応用できますね!