ファイル分類と文字コード
経営情報システム 第11回
「突然、画面いっぱいに意味不明な記号や、見たこともないような漢字がびっしり並ぶことってありますよね」。動画はこんな文字化けの話から始まります。このページでは動画の流れにそって、ファイルを3つの観点で分類する方法、ビットとバイト、文字コードの種類、そして文字化けが起きる理由までをまとめました。まず動画を聞いて、あとからここで復習するのがおすすめです。
文字化けは、故障でもウイルスでもない
大事なファイルを開いた瞬間、画面いっぱいに意味不明な記号が並ぶ。「ウイルスに感染した?」「データが壊れた?」と冷やっとした経験は、きっとあると思います。動画は、あの文字化けがコンピューターの故障でもバグでもないことを示すところから始まります。
その裏にあるのが、ファイルの分類と文字コードというルールです。診断士1次試験の経営情報システムでも、用語の暗記になりがちな領域ですが、動画は「なぜそうなっているのか」を腹落ちさせる流れで進みます。順番は、ファイルを3つの観点で分け、次に文字コードを見て、最後に文字化けの正体にたどり着きます。
観点1:プログラムファイルとデータファイル
最初の観点は、コンピューターが実行するためのプログラムが入っているかどうかです。動画では、プログラムが入っているものをプログラムファイルと呼び、例として、システム全体を操作する制御プログラムやロードモジュールを挙げています。ロードモジュールは、そのままメモリーに読み込んで実行できる状態のプログラムのことです。文書や画像のようにデータのまとまりが入っているものはデータファイルです。
たとえ話:調理器具と食材
聞き手は「プログラムファイルがレシピで、データファイルが食材?」と考えますが、動画は「惜しい」と答えます。レシピも文字で書かれた情報、つまりデータだからです。プログラムファイルは、食材を加工する包丁やフードプロセッサー、データファイルはそこへ放り込まれる果物や野菜にあたります。
制御プログラムは、フードプロセッサーのスイッチを入れて動かすようなものですか。
そのイメージです。処理する側のプログラムと、処理される側のデータ。この関係を意識すると、システム内でファイルがどう扱われているかが見えやすくなります。
観点2:テキストファイルとバイナリファイル
データファイルは、文字情報が含まれているかという観点でさらに2つに分かれます。テキストエディターで開ける文字情報だけのファイルがテキストファイルです。動画の例は、Web上のデータ形式であるXMLと、項目をタブで区切るTSVです。一方、文字情報以外が保存されていて、特定のアプリでないと正しく開けないファイルがバイナリファイルです。
| 種類 | 中身 | 動画の例 |
|---|---|---|
| テキスト | 文字情報だけ。エディターで読める | XML、TSV |
| バイナリ | 文字以外の情報。専用のアプリで開く | 音声、圧縮データ、実行 |
昔、音声ファイルをテキストエディターにドラッグして、謎の記号だらけになったことがあります。
バイナリファイルを無理やりテキストとして読ませた典型例です。エディターは「渡されたのは文字だ」と信じて、音声のデータ配列を文字のルールに当てはめて表示してしまいます。
だからテキストエディターには、テキストファイルしか渡してはいけないんですね。
(補足:TSVはIANAに登録されたメディアタイプ text/tab-separated-values で、1行が1レコード、項目の間はタブ文字で区切ると定義されています。XMLもW3Cの仕様で定められた文字で書く形式で、先頭に符号化宣言を置くことで文字コードを示せます。一方、一般のテキストファイルにはこうした宣言がなく、文字コードの情報が含まれていないことが多い、というのが次の文字化けの節の話です。)
観点3:固定長ファイルと変長ファイル
テキストファイルは何万文字もあります。どこでデータが区切られているのかは、処理する側にとって大問題です。そこで登場するのが、データの長さに着目した分類です。動画では、データの長さが決まっているかどうかで固定長と変長に分けます。なお、一般には「可変長」と書くことも多い言葉です。
動画の説明では、固定長は区切りがなく、あらかじめ決められた一定のパターンで記録するテキストファイルです。主にメインフレームなどの大型コンピューターで使われると紹介されています。「最初の10文字は名前、次の20文字は住所」と枠の大きさを最初から決めておくので、何文字目から読めばよいかが単純な掛け算で出ます。空白は増えますが、大量のデータを高速でバッチ処理するには効率的、という説明です。
変長は、先ほどのTSVのように、データの区切りや桁数を変えられるテキストファイルです。マス目を決めないので、無駄な空白を作らず、必要な分だけデータ領域を使えます。
固定長は原稿用紙、変長は無地のノートみたいなものですね。
ええ。原稿用紙は1行20マスと決まっているので、名前が3文字でも残りは空白のまま。ノートは書いた分だけ書いて、タブで仕切り線を引くイメージです。処理速度を取るか、容量の節約を取るかで使い分けます。
(補足:自作の設例です。名前10桁+住所20桁で1件30桁と決めた固定長なら、100件目の先頭は (100−1)×30+1=2,971桁目と一発で計算できます。名前が3文字の人でも、名前の枠は7桁が空白になります。)
0と1だけで、どう文字を表すのか
ここで動画は、根本的な疑問を投げます。コンピューターは内部では0と1の2進数でしか情報を処理できないのに、どうやって漢字やアルファベットを画面に出しているのか。その翻訳の仕組みが文字コードです。0と1のこの組み合わせが来たら「A」を表示する、この組み合わせなら漢字を表示する、という巨大な対応表だと考えてください。聞き手は「暗号解読表のようなもの」と言っていました。
単位も確認しておきます。コンピューターが扱うデータの最小単位はビットで、0か1のどちらか1つの状態を表します。そして1バイトは8ビットです。
(補足:動画は「1バイトは8ビットと定義されている」と言います。JIS X 0211(1994年)はバイトを「一つの単位として取り扱うビット列」とし、8ビット長のものはオクテット(JIS X 0221-1)と呼んでいます。バイトは本来8ビットとは限りませんが、現代では1バイト=8ビットで、試験でもそのまま覚えて問題ありません。)
文字化けの正体は「対応表の取り違え」
動画が「今日の最重要ポイント」と呼ぶのがここです。文字コードの種類は、システム側で自動判別されないことが多いのです。テキストファイルは根本的には0と1の羅列で、どの文字コードで書かれたかという情報が、ファイル自体に含まれていないことが多いからです。そのため、ユーザー側で適切な文字コードを設定しないと、コンピューターは間違った対応表で解読してしまいます。これが文字化けです。
文字化けって、データが壊れたりウイルスにやられたりしたんじゃなくて、日本語の暗号表で作った手紙を、英語の暗号表で無理やり解読した状態だったんですね。
その通りです。データそのものは無傷なので、エディターの設定で正しい文字コードを選び直せば、パッと元の文章に戻ります。最近は文脈から推測してくれるアプリも増えましたが、根本的にはそういう仕組みです。
(補足:図の「こんにちは」の例は自作の検算です。UTF-8で保存したデータ(15バイト)をShift_JISとして読むと「縺薙s縺ォ縺。縺ッ」になります。なお、元に戻るのは読み方を変えるだけで済むときです。間違った文字コードで読み込んだまま上書き保存すると、変換できなかった部分が置き換わって、元に戻せないことがあります。)
文字コードの種類:1バイト、2バイト、ユニコード
では、選ぶべき文字コードにはどんな種類があるのか。動画は、容量(ビットとバイトの違い)で大きく3つに整理します。
| 分類 | 代表例 | 動画の説明 |
|---|---|---|
| 1バイト以下 | ASCII(7ビット)、EBCDIC(8ビット) | 英数字・基本的な記号。1バイトは最大256通り |
| 2バイト | JIS、シフトJIS、EUC | ひらがな・カタカナ・漢字が入る。日本国内で長く標準的 |
| ユニコード | UTF-8、UTF-16 | 世界中の文字を1つの体系で扱う |
英語ならそれで十分かもしれませんが、日本語はひらがな・カタカナ・漢字で何千個もあるので、箱が小さすぎますね。
そこで2バイト、つまり16ビットのコードが登場します。箱を2つつなげて、対応表を巨大化したわけです。ただ、世界がインターネットでつながると、日本語用、アラビア語用、ロシア語用と対応表が乱立して、世界中で文字化けが起きてしまいます。
だから統一規格が必要になって、ユニコードが生まれたんですね。
ユニコードの中で、私たちが最もよく目にするのがUTF-8とUTF-16です。聞き手は、サイズが決まっていないUTF-8を見て「さっきの変長の考え方に近い」と気づきます。全ての文字を同じサイズで保存しようとすると、本来1バイトで済むアルファベットまで、複雑な漢字に合わせて大きな容量を使ってしまうからです。UTF-8ならアルファベットは1バイトで済ませ、複雑な漢字や特殊な文字が来たら容量を広げられます。
(補足:動画は「UTF-8は1〜6バイト」と説明していますが、これは旧仕様です。UTF-8を定めるRFC 2279(1998年)は1〜6オクテットでしたが、後継のRFC 3629(2003年)は文字の範囲をU+10FFFFまでに制限し、1〜4バイトとしています。UTF-16が2バイトまたは4バイトというのは、Unicode FAQの説明と一致します。また、シフトJISは半角英数字を1バイト、日本語の文字を2バイトで表す混在方式です。上の図の棒は、Pythonで実測した値です。)
動画の整理(試験用の暗記メモ。公的資料の定義ではありません)
- 動画では、ファイルを「プログラムか」「文字情報だけか」「データの長さが決まっているか」の順に分けています。
- 動画では、固定長を処理速度重視、変長を容量の節約重視として対比しています。
- 動画では、文字コードをASCII・EBCDIC(1バイト以下)、JIS・シフトJIS・EUC(2バイト)、UTF-8・UTF-16(ユニコード)と、拡張していった流れで説明しています。
- 動画が文字化けの原因とするのは、文字コードの種類が自動判別されないことが多く、利用者が適切なものを設定しないと間違った対応表で解読してしまうことです。
まとめ
- 動画では、ファイルをプログラムファイルとデータファイルに分け、データファイルをさらにテキストファイルとバイナリファイルに分けています。
- 動画では、テキストファイルを固定長と変長に分け、固定長は処理速度を取り、変長は容量の節約を取るものとして説明しています。
- 文字コードは、0と1の並びを文字に変換する対応表です。1バイトは8ビットで、最大256通りを表せます。
- 動画は、文字コードが1バイト以下、2バイトコード、ユニコードへと拡張された流れを説明しています。UTF-8は1〜4バイトの可変長です(動画の「1〜6バイト」は旧仕様)。
- 動画では、文字化けはデータの故障ではなく、対応表の取り違えだと説明しています。正しい文字コードを選び直せば戻ることが多いです。
動画は最後に、テキストエディターで文章を保存するとき、保存画面の片隅にある文字コードの選択欄に注目してみてください、と呼びかけます。いま打った文字が何バイトのデータとして保存されようとしているのか。そう想像してみると、毎日のパソコン作業も違って見えてきます。
動画で聞く
続けて読む
- 第6回 OSの5大機能経営情報システム・コンピュータ基礎 006
- 第7回 画像形式と音声デジタル化の仕組み経営情報システム・コンピュータ基礎 007
- 第8回 ソフトウェアの分類と階層構造経営情報システム・ソフトウェア 001
- 第9回 機械語からJavaへの進化の歴史経営情報システム・ソフトウェア 002
- 第10回 プログラミング言語の正体経営情報システム・ソフトウェア 003
- 第12回 プログラム実行の流れとWeb技術経営情報システム・ソフトウェア 005
- 第13回 OSSライセンスとコピーレフト経営情報システム・ソフトウェア 006
- 第14回 データベースの正規化経営情報システム・データベース 001
- 第15回 SQLの基本構文経営情報システム・データベース 002
- 第16回 データパニックを防ぐDBMSの仕組み(別バージョン)経営情報システム・データベース 003
- 経営情報システムのWebテキスト一覧同じ科目の48本を一覧・検索
- 中小企業診断士 1次の講座トップ科目別プレイリスト・人気の講義・ファイナルペーパー

