テキストファイルを理解する

Webページ閲覧やメールなどで文字化け(英語でもMojibakeという, Garbled characters, character corruption)した経験はないだろうか。 また、改行という「行為」を考えていたことがあるだろうか。 これらはコンピュータでテキスト(文字列)をどのようにして表示するかの方法に深く根ざしている。

テキストファイルとは文字の連なり(文字列)だけからなるファイルで、文字の色やサイズ、書体、レイアウト情報は含んでいない。

コンピュータを使って文字処理を行う(つまり文章を入力して文書を作成するということ)において、文字化けや改行について適切に理解したうえで作業が行えることは、文章を書くという行為そのものを深く再認識する大きな契機となる。

文字と符号化

コンピュータで a, b, c や + , - , , ? などや空白「 」を「表示する」ためには、取り扱う文字集合を想定した上で、各文字を0と1からなるビット列*(2進数)を対応させている。

7ビットあれば2^7=128個の文字を符号化することができる。 現代英語や西ヨーロッパ言語で使われるラテン文字集合および必要な文字集合を定め、その文字をビット列に対応させたものをASCII(American standard code for information interchange)と呼んでいる。

たとえば、"a"は 1100001(10進数では97、16進数では61) に、"b"は 1100010(10進数では98、16進数では62)である。

このような文字と符号の対応付けを文字符号化(character encoding scheme、CES)といい、そのビット列(数字)を文字コードという。 文字集合が128個以下であれば7ビット、256個以下であれば8ビット(1バイト)で文字を符号化できる。

悩ましいのは、8ビット(1バイト)の符号化では済まされないような多くの文字を使う文化圏(日本を含む多くの文化圏をマルチバイト文化圏という)で、文字を符号化することである。

コンピュータでさまざまな文字を正しく表示するためには、コンピュータソフトウエアに文字符号化方式を通知し、文字と文字コードの対応を事前に了解している必要がある。

日本語文字の符号化方法

日本語の文字を符号化する方法は、JIS X 0208で定められた日本語文字集合(6,879個の図形文字を定義)に対しても、さまざまな事情から複数の文字符号化方式があって、以下はその代表的な方式である。 どれも1つの文字を2バイト(16ビット)で符号化する。

今日では、日本語だけでなく他の文化圏の文字を同時に正しく表示する必要もある。 JIS X 0208で定義された文字集合には、たとえば中国語簡体文字やハングル、アラビア文字などは含まれず、狭すぎるという日本での課題は、さまざまに定義された文字集合(とその符号化方式)を利用する文化圏においても同様に共通の課題となった。

こうした状況を一気に解決するために、世界で使われる全ての文字を含む1つの大きな文字集合を定義し、これを世界共通で利用する文字集合として合意することである。 これがUnicodeである(中国、日本、韓国における各規格の漢字を統合してCJK統合漢字としたことなど大きな議論があった。したがって、「すべて」の文字が収録されているわけではない)。

Unicode文字集合の文字符号化方式についてもさまざまに考えられているが(文字集合が巨大であるためにコンピュータパワーも必要になる)、インターネットでは現在もっとも一般的に利用されている方式が

で、1文字を可変長(1-4バイト)の8ビット符号単位で表現する方式である。

たとえば、文字「あ」は次のようにそれぞれの符号化方式よってコード化される。

文字 UTF-8(16進) EUC-JP(16進) Shift_JIS(16進) JIS(16進) あ e3 81 82 a4 a2 82 a0 24 22

非可視文字と改行

コンピュータで扱われる文字には、通常の利用で書いたり読んだりする可視文字(空白文字 " " も見えている)ような表示する文字以外に制御文字の集合がある。 これは直接的に表示するための文字ではなく非可視文字(invisible characters)と呼ばれることがあり、タイプライターの動作を制御に由来するものが多い。 これら制御文字は今も、モニタやプリンタなどの機器を制御するために用いられる

例えば、ASCII 0A(16進)は LF(Line Feed)は、タイプライターでは、印字装置を固定して紙を上下させる紙送りに使われる。 また、ASCII OD(16進)は CR(Carriage Return)は、タイプライタでは、紙を固定して印字装置(キャリッジ)を左端に移動して元に戻すために使われる。

文書作成において基本的理解を要する制御文字列に 改行コード(New line)があり、ソフトエアに改行行為を伝えるために用いられる。 注目すべきことは、同じ文字符号化方式を使用していても、改行コードは別に指定されるべきものであるということだ(OSごとに暗黙の標準があったのだが)。 異なるOS間でのファイル転送の際には、改行が正確に反映されない場合がある。

改行コードには次の3つがあり、歴史的事情に起因する。

LF 主にUnix系のシステムで用いられている CR 主にMacOSで用いられている LF+CR 主にWindowsで用いられている

文字列を編集処理するワードプロセッサやエディタなどのソフトウエアにおいて、

を意識しなければならない場合が少なくない。さらに、HTMLやTeXファイルの記述においては、強制改行段落改行の差異を理解しておくことも必要になる。