[小西ホームページ]   [目次・索引]   [前の授業]   [次の授業]

コンピュータIID(UNIXとHTML)第5回

目次
5.1 ファイル・タイプ
5.1.1 ファイルの中身
5.1.2 ファイルの種類
5.2 文字コード
5.2.1 テキスト・ファイルとバイナリ・ファイル
5.2.2 英語の文字コード
5.2.3 日本語の文字コード
5.2.4 日本語EUC
5.2.5 JISコード
5.2.6 シフトJIS
5.2.7 国際的な文字コード
5.2.8 UTF-8
5.2.9 改行コード
5.3 演習5
5.4 レポート課題
5.5 参考文献
索引

5.1 ファイル・タイプ

5.1.1 ファイルの中身

パソコンで取り扱うあらゆるデータは、ファイルに保存することができます。 ワープロ文書や表計算データだけでなく、画像データや音楽データ、動画データなどもファイルに保存できます。 このことは、WindowsでもMacでもUNIXでも同じです。 今日は、ファイルの中身がどうなっているかについて説明します。

実は、ファイルの中身は、0と1を並べたものにすぎません。 この0と1を ビット と呼びます。 ただ、ビットはあまりにも小さいので、今のパソコンは8ビットを基本単位にしています。 この8ビットを バイト と呼びます。 つまり、ファイルの中身はバイトの列なのです。 バイトの列だけで、あらゆるデータを表現しているのです。

ビットと似た言葉に、2進数があります。 2進数 とは、ビットの列を数と見なしたものです。

odコマンド (Octal Dump)は、ファイルの中身を、数バイトごとに表示します。 1バイトごとに表示する場合の形式は

od -b file

です。

このコマンドで、2進数は表示されません。 その代わり、3桁の数が表示されます。 この3桁の数は 8進数 と呼ばれるものです。 3桁の8進数を8桁の2進数に変換するには、以下の表にしたがって8進数を2進数に置き換え、9桁の2進数にしてから最も左の桁を取り除きます。

8進数 2進数
0 000
1 001
2 010
3 011
4 100
5 101
6 110
7 111
表 5.1  8進数と2進数の対応
b04a001@AsiaA1:~/comp2d% cat english01.txt
This is a pen.
Is this a pen?
Yes, it is.
b04a001@AsiaA1:~/comp2d% od -b english01.txt
0000000 124 150 151 163 040 151 163 040 141 040 160 145 156 056 012 111
0000020 163 040 164 150 151 163 040 141 040 160 145 156 077 012 131 145
0000040 163 054 040 151 164 040 151 163 056 012
0000052
b04a001@AsiaA1:~/comp2d%

このコマンドで、ファイルenglish01.txtの中身は、124 150 151 ..., すなわち 01010100 01101000 01101001 ...であることが分かります。

5.1.2 ファイルの種類

パソコンのあらゆるデータがファイルに保存できるということは、逆に、ファイルを見ただけではどんなデータか分からないということです。 このため、利用者は、ファイル名に拡張子というものを追加します。 拡張子 とは、ファイルの種類の目印で、ドット(.)とアルファベット3文字程度で表されます。 よく使われるファイルについては、拡張子の書き方が決まっています。 重要なものは、以下の通りです。

ファイルの分類 ファイルの種類 拡張子
テキスト
ファイル
プレーン・テキスト .txt
HTMLファイル .html, .htm
スタイルシート .css
バイナリ
ファイル
画像ファイル(GIF形式) .gif
画像ファイル(JPEG形式) .jpeg, .jpg
画像ファイル(PNG形式) .png
画像ファイル(BMP形式) .bmp
画像ファイル(TIFF形式) .tiff, .tif
Wordファイル .doc
Excelファイル .xls
PowerPointファイル .ppt
PDFファイル .pdf
Windows実行ファイル .com
Windows実行ファイル .exe
圧縮ファイル(ZIP形式) .zip
圧縮ファイル(LZH形式) .lzh
表 5.2  重要な拡張子

ファイル名は利用者が自由に付けられますので、わざと関係のない拡張子を付けることも、可能といえば可能です。 そのようなファイルでも、次のコマンドを使えば、ファイルの種類を推測できます。

fileコマンド は、ファイルの中身を読み取り、その特徴からファイルの種類を推測し、結果を表示します。 形式は

file file

です。 紛らわしいファイルについては、間違った推測をすることもあります。 このコマンドは、ファイルの拡張子では判断しません。

b04a001@AsiaA1:~/comp2d% file english01.txt
english01.txt: ASCII text
b04a001@AsiaA1:~/comp2d%

5.2 文字コード

5.2.1 テキスト・ファイルとバイナリ・ファイル

ファイルの種類は、テキスト・ファイルとバイナリ・ファイルの大きく2つに分類できます。 文字だけで構成されるファイルが テキスト・ファイル で、そうでないファイルが バイナリ・ファイル です。

すでに説明した通り、ファイルの中身はバイトの列ですが、どういう列かはまだ説明していません。 テキスト・ファイルの中身は、比較的単純です。 一方、バイナリ・ファイルの中身は、ファイルの種類ごとに違い、ある程度複雑です。 そこで、ここではテキスト・ファイルに絞って、ファイルの中身を説明します。

テキスト・ファイルの中身は、基本的に、一文字一文字の文字コードを並べたものです。 ここで、 文字コード とは、文字をビット列に対応させたものです。

5.2.2 英語の文字コード

まず、1バイトで何通りのデータが表現できるかを考えます。 これは、順列・組み合わせの問題で、2×2×2×2×2×2×2×2=256通りです。 したがって、英文テキストなら、アルファベットの大文字・小文字の52文字と数字10文字、各種記号を使ったとしても、1文字を1バイトで表現できます。

英語の文字コードでもっとも標準的なのは、ASCIIです。 ASCII (American national Standard Code for Information Interchange, アスキー)とは、アメリカで制定された文字コードです。 ASCIIでは、1文字を1バイトで表現します。 その大まかな分類は、次のようになります。

ビット・パターン 分類
000xxxxx 制御文字
001xxxxx 数字と各種記号
010xxxxx 大文字と各種記号
011xxxxx 小文字と各種記号
表 5.3  ASCIIのビット・パターン

ここで、 制御文字 とは、空白や改行などのことです。 制御文字は表示できるものではありませんが、広い意味での文字と見なされます。

ASCIIの内容は、オンライン・マニュアルで見られます。 man asciiと入力してください。 最初の"The octal set"の部分が、8進数です。

odコマンドで、ファイルをASCIIと見なして表示するには、

od -c file

とします。

英文テキストの場合、od -c コマンドで、テキストがほとんどそのまま表示されます。

b04a001@AsiaA1:~/comp2d% cat english01.txt
This is a pen.
Is this a pen?
Yes, it is.
b04a001@AsiaA1:~/comp2d% od -b english01.txt
0000000 124 150 151 163 040 151 163 040 141 040 160 145 156 056 012 111
0000020 163 040 164 150 151 163 040 141 040 160 145 156 077 012 131 145
0000040 163 054 040 151 164 040 151 163 056 012
0000052
b04a001@AsiaA1:~/comp2d% od -c english01.txt
0000000    T   h   i   s       i   s       a       p   e   n   .  \n   I
0000020    s       t   h   i   s       a       p   e   n   ?  \n   Y   e
0000040    s   ,       i   t       i   s   .  \n
0000052
b04a001@AsiaA1:~/comp2d%

5.2.3 日本語の文字コード

すでに説明した通り、1バイトで表現できるデータは256通りです。 日本語の場合、漢字がたくさんありますので、256通りでは間に合いません。 2バイトにしますと、256×256=65536通りになりますので、これなら十分表現できます。 日本語の文字コードは、1文字を2バイトで表現します。

日本語だけを使うのでしたら、日本語の文字コードは、1文字2バイトを並べるだけで済みます。 しかし、ASCIIの文字、つまり数字やアルファベットも同時に利用できないと困ります。 その要求を満たす方法が3種類あり、日本語の文字コードは3種類になっています。

5.2.4 日本語EUC

第1の文字コードは、 日本語EUC (Extended Unix Code)です。 これは、最も左のビットが1のバイトを2バイト使うものです。 ASCIIの最も左のビットは0ですので、最も左のビットを見れば、ASCII文字と日本語EUC文字の区別ができます。

ビット・パターン 分類
0xxxxxxx ASCII
1xxxxxxx 1xxxxxxx 日本語の文字
表 5.4  日本語EUCのビット・パターン

日本語EUCは、主にUNIXで使われます。

ここで、以下の内容のファイルjapanese01.txtを作成します。 保存するときは、文字コードはEUC, 改行コードはLF(UNIX)にします。

東京女子大学

odコマンドで、このファイルの中身を表示します。

b04a001@AsiaA1:~/comp2d% cat japanese01.txt
東京女子大学
b04a001@AsiaA1:~/comp2d% od -b japanese01.txt
0000000   305 354 265 376 275 367 273 322 302 347 263 330 012
0000015
b04a001@AsiaA1:~/comp2d%

文字とバイトの対応は、次のようになります。 ASCII文字(8進数で0xxか1xx)が全く使われていないことに注意してください。

東 = 305 354
京 = 265 376
女 = 275 367
子 = 273 322
大 = 302 347
学 = 263 330
改行 = 012

5.2.5 JISコード

第2の文字コードは、 JISコード (ジスコート)または ISO-2022-JP と呼ばれるものです。 この文字コードでは、日本語の1文字を、ASCIIの2文字に対応させます。 そして、日本語開始を表す3バイトと日本語終了を表す3バイトを定義し、これに囲まれた部分を日本語と見なすのです。 具体的には、日本語開始は 033 044 102, 日本語終了は 033 050 102 です。 033は制御文字なので、ASCII文字とJIS文字の区別ができます。

ビット・パターン 分類
0xxxxxxx ASCII
0xxxxxxx 0xxxxxxx 日本語の文字
表 5.5  JISコードのビット・パターン

JISコードは、主に電子メールで使われます。

ここで、ファイルjapanese01.txtをJISで保存しなおします。

b04a001@AsiaA1:~/comp2d% od -b japanese01.txt
0000000   033 044 102 105 154 065 176 075 167 073 122 102 147 063 130 033
0000020   050 102 012
0000023
b04a001@AsiaA1:~/comp2d%

文字とバイトの対応は、次のようになります。 全てASCII文字(8進数で0xxか1xx)であることに注意してください。

日本語開始 = 033 044 102
東 = 105 154
京 = 065 176
女 = 075 167
子 = 073 122
大 = 102 147
学 = 063 130
日本語終了 = 033 050 102
改行 = 012

5.2.6 シフトJIS

第3の文字コードは、 シフトJIS です。 これは、1バイトの半角カタカナも、2バイトの日本語文字も使えるようにしたものです。

日本のパソコンは、漢字が使えるまでは、ASCII文字と半角カタカナを使っていました。 半角カタカナのビット・パターンは、101xxxxxと110xxxxxでしたので、ASCII文字とは区別ができました。 やがて漢字が使えるようになり、2バイトの日本語文字を、ビット・パターンのすきまに割り当てたのがシフトJISです。 ビット・パターンをよく見れば、ASCII文字、半角カタカナ、シフトJIS文字の区別ができます。

ビット・パターン 分類
0xxxxxxx ASCII
100xxxxx xxxxxxxx 日本語の文字
101xxxxx 半角カタカナ
110xxxxx 半角カタカナ
111xxxxx xxxxxxxx 日本語の文字
表 5.6  シフトJISのビット・パターン

シフトJISは、主にWindowsとMacで使われます。

ここで、ファイルjapanese01.txtをシフトJISで保存しなおします。

b04a001@AsiaA1:~/comp2d% od -b japanese01.txt
0000000   223 214 213 236 217 227 216 161 221 345 212 167 012
0000015
b04a001@AsiaA1:~/comp2d%

文字とバイトの対応は、次のようになります。 部分的にASCII文字(8進数で0xxか1xx)が使われていることに注意してください。

東 = 223 214
京 = 213 236
女 = 217 227
子 = 216 161
大 = 221 345
学 = 212 167
改行 = 012

5.2.7 国際的な文字コード

インターネットの普及にともない、世界中の文字を同時に利用することも考えなければならなくなりました。 ここで、問題になるのが、文字数の多い漢字です。 東アジア各国で使われている漢字をそのまま集めますと、数十万にもなってしまいます。 しかし、それらを頑張ってまとめますと、なんとか2バイト(65536通り)に収まります。 このようにして、世界中の文字を2バイトで表現したものが、 Unicode (ユニコード)です。

5.2.8 UTF-8

Unicodeだけを使うと決めてしまえば、国際的な文字コードは、1文字2バイトを並べるだけで済みます。 しかし、やはりASCIIも使えないと困ります。 その要求を満たすのが、 UTF-8 (Unicode Translation Format)です。

UTF-8では、世界中の文字を2バイトか3バイトで表現します。 いくつかの言語が2バイトに割り当てられ、残りが3バイトです。 日本語の文字は、ほとんどが3バイトになります。 ビット・パターンをよく見れば、ASCII文字、2バイト文字、3バイト文字の区別ができます。

ビット・パターン 分類
0xxxxxxx ASCII
110xxxxx 10xxxxxx 世界中の文字
1110xxxx 10xxxxxx 10xxxxxx 世界中の文字
表 5.7  UTF-8のビット・パターン

UTF-8は、主にインターネットで使われます。

ここで、ファイルjapanese01.txtをUTF-8で保存しなおします。

b04a001@AsiaA1:~/comp2d% od -b japanese01.txt
0000000   346 235 261 344 272 254 345 245 263 345 255 220 345 244 247 345
0000020   255 246 012
0000023
b04a001@AsiaA1:~/comp2d%

文字とバイトの対応は、次のようになります。 ASCII文字(8進数で0xxか1xx)が全く使われていないことに注意してください。

東 = 346 235 261
京 = 344 272 254
女 = 345 245 263
子 = 345 255 220
大 = 345 244 247
学 = 345 255 246
改行 = 012

5.2.9 改行コード

今までの例では、改行の文字コードは012でした。 実は、標準的な改行コードは、OSごとに異なります。 具体的には、以下の通りです。

OS 改行コード
Windows 015 012
Mac 015
UNIX 012
表 5.8  OSごとの改行コード

5.3 演習5

以下の内容を、文字コードはEUC、改行コードはLF(UNIX)として、ファイルjapanese02.txtに保存してください。

さくらさく

そして、odコマンドでこのファイルの中身を表示し、どの文字がどのバイトに対応しているかを説明してください。

文字コードをJISにして保存した場合と、文字コードをシフトJISにして保存した場合についても、同様に説明してください。

余力のある人は、自分で考えた日本語テキスト(5文字程度)をファイル(例えばjapanese03.txt)に保存してください。 そして、EUC, JIS, シフトJISで保存して、ファイルの中身を表示し、どの文字がどのバイトに対応しているかを説明してください。


5.4 レポート課題

今日の演習5の答案(「ターミナル」画面のコピーとその説明文)をメールでkonishi@twcu.ac.jp宛に提出してください。 メールを送るときは、大学のパソコンを使うか、大学のメール・サーバに接続するかして、差出人が大学のメール・アドレスになるようにしてください。 メールの本文には、学生番号、氏名、科目名、授業日(10月25日)を明記してください。


5.5 参考文献


[小西ホームページ]   [目次・索引]   [前の授業]   [次の授業]

2006年10月25日更新
小西 善二郎 <konishi@twcu.ac.jp>
Copyright (C) 2006 Zenjiro Konishi. All rights reserved.