文字が化けてしまう理由と、目に見えない改行コードが隠していることを理解しましょう。
このレッスンを Kodokon で開く機械は A という文字が何なのかを知りません。扱えるのは数だけです。ですから文字を書くために、みんなで対応表を決める必要がありました。65という数は A、66は B、といった具合です。この取り決めを文字コード、あるいはエンコーディングと呼びます。いちばん古いASCIIは1960年代にさかのぼり、英語のアルファベットしか収めていませんでした。é も ç も ü もなく、漢字は一文字も入っていません。
その後、国ごとに独自の表を作り、そこから混乱が始まりました。フランス語のファイルをロシア語の表で開くと、意味不明の記号の羅列になります。日本語で言う文字化けです。現代の答えがUnicode、あらゆる言語のあらゆる文字に、絵文字まで含めて番号を割り当てた唯一の目録です。そしてUTF-8は、その番号をファイルに書き込むための標準的なやり方です。今日のルールは単純で、例外はありません。ファイルは必ずUTF-8で保存することです。
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は一文字だけ、LF(line feed、改行)を使い、\n と書きます。Windowsは二文字続けて、CRLF(carriage return のあとに line feed)を使い、\r\n と書きます。これはタイプライターの名残です。あちらでは二つの動作が必要でした。キャリッジを左端に戻し、それから紙を一行分送るのです。
画面に見えているもの:
Hello
Hi there
ファイルに実際に入っているもの:
macOS / Linux (LF) Hello\nHi there
Windows (CRLF) Hello\r\nHi thereé が é と表示されるとき、何が起きていますか?