Kodokon kodokon.com

アクセント記号、UTF-8、改行コード

文字が化けてしまう理由と、目に見えない改行コードが隠していることを理解しましょう。

7 分 · 3 問

このレッスンを Kodokon で開く

機械は A という文字が何なのかを知りません。扱えるのは数だけです。ですから文字を書くために、みんなで対応表を決める必要がありました。65という数は A、66は B、といった具合です。この取り決めを文字コード、あるいはエンコーディングと呼びます。いちばん古いASCIIは1960年代にさかのぼり、英語のアルファベットしか収めていませんでした。éçü もなく、漢字は一文字も入っていません。

その後、国ごとに独自の表を作り、そこから混乱が始まりました。フランス語のファイルをロシア語の表で開くと、意味不明の記号の羅列になります。日本語で言う文字化けです。現代の答えがUnicode、あらゆる言語のあらゆる文字に、絵文字まで含めて番号を割り当てた唯一の目録です。そしてUTF-8は、その番号をファイルに書き込むための標準的なやり方です。今日のルールは単純で、例外はありません。ファイルは必ずUTF-8で保存することです。

TEXT
UTF-8で書き、UTF-8で読む        ->  Creme brulee(アクセント記号が正しい)
UTF-8で書き、Latin-1で読む      ->  Crème brûlée
Latin-1で書き、UTF-8で読む      ->  Cr?me br?l?e
同じファイルでも、違う表で読むと文字化けします。

二つ目の見えないもの、それが改行コードです。Enterキーを押しても、ファイルの中に線が引かれるわけではありません。代わりに、目に見えない文字が一つか二つ書き込まれます。そしてここでもまた、システム同士は最後まで足並みをそろえませんでした。macOSとLinuxは一文字だけ、LFline feed、改行)を使い、\n と書きます。Windowsは二文字続けて、CRLFcarriage return のあとに line feed)を使い、\r\n と書きます。これはタイプライターの名残です。あちらでは二つの動作が必要でした。キャリッジを左端に戻し、それから紙を一行分送るのです。

TEXT
画面に見えているもの:

Hello
Hi there

ファイルに実際に入っているもの:

macOS / Linux (LF)     Hello\nHi there
Windows (CRLF)         Hello\r\nHi there
画面では同じに見える二つのファイルが、実際には違う中身を持っています。

理解度チェック

このレッスンの要点をしっかり覚えているか確認しましょう。

  1. éé と表示されるとき、何が起きていますか?
    • 書いたときとは違う文字コードでファイルが読まれている
    • ファイルが壊れていて、作り直すしかない
    • システムがアクセント記号を取り除いた
    • フォントが足りない
  2. Windowsが歴史的に使ってきた改行コードはどれですか?
    • CRLF
    • LF
    • CRだけ
  3. コードエディタではどの設定を選ぶべきですか?
    • 文字コードはUTF-8、改行コードはLF
    • 文字コードはASCII、改行コードはCRLF
    • 文字コードはLatin-1、改行コードはCR