このstepでは、文字情報(テキスト)がパソコンやインターネットなどICT環境の中ではどのように表現されているかを学ぶ。これらは講座の最終ステップではなく、準備段階である。受講生の方々の学習経験や予備知識の有無をみながら、必要に応じて講座に組み入れていく。
コンピュータは、文字、画像、音声などさまざまな表現メディアによる情報を扱えるが、CPU(中央処理装置)が扱うことができるデータは、2進数の数値情報だけである。したがって、数値以外の情報を扱う場合は、それらをいったん数値情報に変換して処理し、計算結果を元の形式に逆変換しなければならない。そのため、各種情報と数値情報との変換規則が必要だが、それをコード(code)※1とかフォーマット(format)と呼ぶ。
1 codeは「規約」とか、もっと重々しく「法典」を指す。「目には目を、歯には歯を」のハムラビ法典はCode of Hammurabiだ。
このうち、文字情報と数値情報を相互変換する規則は、文字コードという。
テキストの最小単位は、1個の文字である。ICTでは、すべての文字は文字コードによって数値に変換されて処理される。文字から変換された数値自体も文字コードと呼ばれる。これには大別してつぎの2種類がある。
まず、英数字を表現するためのASCII文字コードについて学ぶ。図1にASCII文字コード表を示す。
たとえばAは10進数の65、16進数の0x41と対応する。この講座では16進数表記で統一しよう。メモリ上の1BYTEに書かれた「0x41」が数と文字のどちらを表すのかは(画像や音声の一部かもしれない)、データ自体から判断できないので、プログラム側で区別するしかない。
図1から分かるように、1BYTEコードと言っても、英数字や記号類には128種類の文字で十分なので、ASCIIコードのMSB(最上位ビット)は常に0である。この性質は、Shift-JISコードと混用する場合に重要になる。
ICTにおける「文字」には、一般通念では文字でないものも含まれている。たとえば、SP(0x20)は空白文字である。2バイトコードの全角空白と区別するために、半角空白と呼ばれる。これがないと、文字列中に間隔を開けられず、単語さえ区切れなくなってしまう。
また、赤字で書かれた33種類の文字は、コンピュータやネットワークを制御する制御文字である。現在では使われていないものも多いので、以下のものを知っておけば十分だ。
自分の名前をアルファベット表記した文字列を、ASCIIコードに変換してみよう。
例:
Y O Y A M A N O G U C H I \0(NUL)
0x59 0x4f 0x20 0x59 0x41 0x4d 0x41 0x4e 0x4f 0x47 0x55 0x43 0x48 0x49 0x00
この14文字の文字列は、14 + 1 = 15 BYTEのBYTE列で表現される。「ASCIIコード」という「文字の規格」を前提にして、その上にASCIZ文字列※2という文字列の規格が成り立っている。
2 あまりセンスのよいネーミングではない。0で終端されたASCII文字列を意味するダジャレである。
文字列(string)とは文字の並びであり、典型的には「。」で区切られた1つの文や、改行で終わる1つの段落が、これにあたる。テキストファイル全体も、改行コードなどの制御文字を含んだ1つの文字列である。
文字列は、上記のASCIZ形式以外にも、文字コード列の直前に長さを表す数値を付けたデータで表現されることもある。データベースなどのアプリでは、文字列を実際にメモリに格納する前にサイズを知る必要が多いため、この形式が採用される。
日本語文字コードは多BYTEコードであり、上述のようにいろいろあるが、この節ではWindowsパソコンのテキストファイルで広く使われているShift-JISコードについて説明する。Shift_JISコード表は6000文字以上を収録している巨大なもので、ここに図を掲載阿することもできないが、Windowsのユーティリティ文字コード表で調べられる。図2にその画面と使い方を示す。
図は「山」の文字コードを調べているところである。
ABC[SI]漢字だよ[SO]123
という具合だ。プログラム上のでの処理はたいへん煩雑にならざるを得ない。JISコードからShift_JISコードへの変換は、文字の並びを変えずに領域ごとシフトさせているので、簡単な数式で計算できる。図3に、JISコードとShift-JISコードのコード領域の関係を示す。
3 Unicodeとその文字符号化スキーム(UTF-8など)は、国際標準規格ISO/IEC 10646で定義されている。「文字符号化スキーム」については詳述する余裕がないが、上記「山」のUnicodeコード(符号位置)「U+5C71」というのはいわば「文字コード表のマス目番号」であり、そこからメモリ上の実際のバイト列への変換方式が「文字符号化スキーム」だと考えると少し分かりやすい。ちなみに「UTF-16 Big Endian」では「0x5C71」とそのままだが、「UTF-16 Little Endian」だと「0x715C」と反転するし、「UTF-8」だと「0xE5B1B1(3バイト)」というように、一見無関係に見えるくらい変形されてしまう。
4 JISコードは、ASCIIコードと同一の1 BYTEコード(英数字、半角カタカナ、記号)が日本工業規格(JIS)のJIS X0201で、漢字(全角文字)がJIS X0208で定義されている。また、国際標準規格ISO-2022-JPでも定義されている。Shift-JISコードは、長らく標準化対象外のデファクトスタンダードだったが、現在はJIS X0208またはJIS X0213の「附属書1」として一応の標準化がなされており、その意味でShift-JIS X 0213ともいう。文字コードの標準化をめぐるテーマはたいへん複雑かつ深遠なので、この講座ではこれ以上は説明しない。
5 2バイト文字コードなんか気にもしてないアメリケーンなアプリでは、それでも文字化けが起こる。特に第2バイトが\(0x5c)とかぶる文字(たとえばソ(0x835c))以降が正常に表示されないなどの問題が起こるので注意。
自分の名前を全角文字列で表記し、Shift-JISとUnicode(符号位置)に変換する。文字コードは文字コード表ユーティリティで調べること。
例:
山 之 口 洋 \0(NUL)
0x8e52 0x9456 0x8cfb 0x8140 0x976d 0x00 Shift_JISコード
0x5c71 0x4e4b 0x53e3 0x3000 0x6d0b 0x00 Unicode(符号位置)コード
この5文字の文字列は、どちらの文字コードでも、5 * 2 + 1 = 11 BYTEのBYTE列で表現される。これらもまたASCIZ文字列と呼ぶ。
文字コードで表現され、デジタル記録メディアに格納されたテキストデータを電子化テキストという。
世界には、CD、DVD、BD、HDD、SSD、磁気テープなどのデジタル記録メディア上に格納された、膨大な量のテキスト情報が存在する。そして、紙に活字などで記録されたアナログなテキスト情報も、依然として大量に存在する。これは非電子化テキストである。
私たちが知的生産活動を行う場合、当分の間(おそらくこれから数十年間)は、これら2種類のテキスト情報を併用しなくてはならない。そこで、相互変換や、テキスト情報を統一的に扱うICTスキルが必要になる。主なものを挙げる。