コンピューターでは何もかもが数値で表されます。たとえば以前の記事で書いたように、画像データは1点の明るさを数値化して並べたものでした。
それと同じように、コンピューター内部では文字も数値で表されています。文字を数値で表す方法は非常にシンプルで、ひとつの文字にひとつの数値を対応させていくだけです。たとえば“A”は65、“B”は66、“C”は67という具合です。コンピューター内部ではそのような数値で表されていて、表示や印刷をするときに文字の形を作っています。こうすることで、コンピューターが文字を扱っているように見えます。このように、文字に対応している数値のことを「文字コード」と呼びます。
■文字化けはなぜ起こるか
文字と数値が1つずつ対応してさえいれば、そのコンピューターで文字を扱うことはできるのですが、他のコンピューターと文字のやりとりをするときのことを考える必要があります。
仮に、コンピューター1では文字コードを次のように定義していたとします。
A=65、B=66、C=67
さらに、別のコンピューター2では次のように定義していたとします。
A=64、B=65、C=66
このときコンピューター1からコンピューター2へ文字“A”を送信したいとします。
コンピューター1にとってはA=65なので、コンピューター1は65を送信します。コンピューター2はもちろん65を受信しますが、コンピューター2にとってはB=65なので、受信したデータを文字“B”だと誤認してしまいます。

このように、文字コードの定義が異なるコンピューター同士で文字データをやりとりすると、表示がおかしくなってしまいます。これが文字化けです。ここではアルファベットが別のアルファベットに置き換わるよう説明しましたが、実際の文字化けでは、記号とも文字ともつかない図形らしきものが表示されることも多いです。
■文字コード体系
どのコンピューターでも文字と数値の対応が同じになっていれば、文字化けの問題が起こりません。文字化けが起こるのは困りますので、どの文字と数値を対応させなさいという決まりがあり、それを「文字コード体系」といいます。ただし、単に「文字コード」と呼ぶことの方が多い気がします。
半角英数字や半角記号の文字コード体系がASCIIコード(アスキーコード)です。最初に例示したA=65、B=66、C=67というのはASCIIコードで決められた値です。そして、「ABC」という文字の並びを表現したい場合は65,66,67という数値を順番に並べることで表現します。
ASCIIでは文字コード、つまり文字に対応する数値を並べるだけで文章を表現できますが、日本語を対応させようとすると話が複雑になります。
日本語にももちろん文字コード体系があり、JISコードがその1つです。もともと英語しか使えないはずの文字コード体系を改変して日本語に対応させたこともあり、単純に文字コードを並べるだけで文字の並びを表現しているのではありません。JISコードは「ここからが全角文字ですよ」とか「ここからが半角文字ですよ」という意味の数値があり、そこで全角と半角を切り替えて文字を表現します。
このため、単純にどの値がどの文字に対応すると決めることはできず、現在は全角文字を処理しているか、それとも半角文字を処理しているのかを判断する必要があります。その不便さゆえかどうかは知りませんが、日本語には他にも文字コードがあります。主にWindowsで使われているShift-JIS(シフト・ジス)やUNIX系のOSで使われているEUC(イー・ユー・シー)がそれです。
英語圏ではASCIIのみで十分ですが、いま挙げたように日本語には複数の文字コード体系があります。JISコードとShift-JISとEUCとでは文字と数字の対応が異なるので、たとえばEUCを用いて保存された文章を、Shift-JISしか扱えないソフトで開いたりすると文字化けが起こります。
世界の主要な言語を1つの文字コードで表現しようというコンセプトのUnicode(ユニコード)という文字コード体系もあります。Windowsの内部などでUnicodeが使われていたりするものの、現在では文字コード体系が1つ増えたにすぎない状態です。文字コード体系の主流がUnicodeに置き換われば文字化けもなくなるかも知れませんが、それはまだまだ先になりそうです。
図に使っているパソコンなどの画像はhiroさんのサイト「おえかき工房」に公開されている素材を使用しました。
タグ:文字化け
【基礎知識の最新記事】

