文字コードは指定しましょう
TOP > てきとうにこらむ > ゲーム作りとプログラミング日記 > 文字コードは指定しましょう
文字コードの話
あけましておめでとうございます。文字コードでXが盛り上がっていたので。
大前提として
2025年にもなると、文字コードを意識してやり取りするなんていうのはほとんどなくなってきましたが、大前提として。
- 発信する文字コードは明示する
このことは大前提にあります。例えば、以下のように現在のHTMLでもUTF-8を指定します。
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
</head>
</html>
UTF-8というのは優秀で、ASCIIとの互換性もあり、最初のバイトで何バイトかわかるようになっていますし、他のUnicodeの文字コードと違い、エンディアンを気にする必要性もなく、間違った文字コードの指定(文字化け)は起こりづらいと思われますが、例えばUTF-8の冗長なエンコードもありますから油断はできな いですね。
とはいえ、全世界で使われている文字コードである関係上、研究も行われていてそれによる恩恵を受けやすいです。それでも、文字コードの明示というのは重要であります。
重要でなくなる時代(つまり、全てのやり取りはUTF-8で行うことっていう教育が全世界できちんと行われる)って来るのでしょうかね?
UTF-8にBOM(Byte Order Mark)は必要なのか?
BOMはUTF-16やUTF-32ではビッグエンディアンかリトルエンディアンかによって判定されることから、それを指定するのにBOMを使うことになっていますが、UTF-8ではエンディアンにかかわらず同じ内容になるので、仕様上つけてもつけなくてもよいくらいになっています。UTF-8のBOMは16進数でFF BB BFですね。
ないと動作しないアプリケーション、あると動作しないアプリケーションとがあるため、開発するさいは有無は聞いておくと良いでしょう。文字コードに絶対はなく、あるのは受け手と送り手の合意であると考えます。
未だに推定(自動判定)に頼らざるを得ないシチュエーションも
未だに文字コードの指定がなくて推定(自動判定とも言うが、このくらいのニュアンスがふさわしいと思います)をしなければならないケースもあると思います。それは文字コードとして正しくないが、限りなく近いというケースで、その場合は読むのに大変だと思います。
ただ、その場合でもどういう場合でも、コンピューターへ文字コードの指定がなかった場合にできるのは推定くらいのものっていうのは覚えておいてほしいと思います。現在では文字コードの意識をすることも薄くなってきましたが、相変わらず必要です。
改めて文字コードの指定は重要です
つい先日、(壊れた)ISO-2022-JPでXSSができるケースも発見されましたね。個人的には、海外でJISコードのエクスプロイトが見つかるというのは、喜ばしいと思っています。こんな複雑な文字コードの世界にわざわざお越しくださってありがたいです。
ISO-2022-JPの自動判定によるクロスサイト・スクリプティング(XSS)
なので、文字コードの指定というのは重要だよという話でした。