[前へ]   [目次へ]   [次へ]

文字の扱われ方


(08/10/17) 情勢の変化を追記しました。

前回「次は0x5C問題について」とか書きましたが、これを先に説明しておかないと説明しきれないことに気付いたので・・・

文字の扱いについては言語によって直接 文字、文字列として扱うものと、
数字として扱うものがあります。

最近の言語の多くは文字は文字として扱いますが、C言語系は数字として扱います。
この関係から、これについてはC言語系を使うと分かりやすいかと思います。

さて、文字がどのように扱われるかは、テキストファイルをバイナリで読んでみれば分かります。
例えば、
   01234abcdeあいうえお
というテキストを普通に保存(文字コード「Shift_JIS」)したものを
バイナリエディタを使って開くと・・・

   000000 30 31 32 33 34 61 62 63  01234abc
   000008 64 65 82 A0 82 A2 82 A4  de......
   000010 82 A6 82 A8              ....


エディタによっても表記は異なると思いますが、だいたい上のような表示になると思います。
これは1バイトずつ読み取ったものを16進法で表示したものです。
右側は対応する部分で文字として読めた部分を示しています。(読めない部分は.になってます)

つまり文字はファイルに書き込む際、このようなデータになっています。
文字とここで書き込まれるバイトごとの数値には対応関係があり、「文字コード」と呼ばれます。
文字コードには結構種類がありますが、文字コードが異なると大抵の場合、読むことは不可能になります。

いわゆる「文字化け」というのは、どの文字コードで読み取るかを間違えている場合が大半で、
正しい文字コードで読むようにすれば、大抵は回復します。

ちなみに上は「Shift_JIS」文字コードの場合ですが、「Unicode」で保存してみたところ、

   000000 FF FE 30 00 31 00 32 00  ..0.1.2.
   000008 33 00 34 00 61 00 62 00  3.4.a.b.
   000010 63 00 64 00 65 00 42 30  c.d.e.B0
   000018 44 30 46 30 48 30 4A 30  D0F0H0J0


となりました。上とはかなり違ってます。(笑)

多くの言語はShift_JISと互換するコードが基本になっているので、
ソースを保存する時はShift_JISにしておけば大抵は大丈夫なはずです。

(08/10/17追記)

最近はUTF-8やUnicode(UTF-16)を推奨する言語も増えてきました。
まず言語の推奨を確認し、状況に応じて文字コードを選択するようにしてください。

(08/10/17追記ここまで)

おまけ「ASCIIコード表」

[前へ]   [目次へ]   [次へ]

プログラミング講座 総合目次

最終更新 2008/10/17