UTF-8とかShift_JISとかUnicodeとかASCIIとか、曖昧だったそこらへんを整理する文字コードについての理解を深める回。最近文字コードとエンコーディングについてわからず、もう少し理解が必要であったため色々と調べたことをまとめていく。文字コードについて調べていると「昨今は文字コードを気にする必要はほとんどなくなったが...」という枕詞から始まる記事を多数見受け、時代の流れ的にはあまり必要のない内容であるようにも感じるが、そういうのを知ってこそ悦に浸れることもあるのではないかと。メモリの管理を念頭において開発を行うオンプレ静的言語プログラマの持つ、イマドキとは異なる「スゴさ」に少しでも首を突っ込むことができるようになれればなと、現代の恵まれた環境でプログラムを書く駆け出しエンジニアは思う訳である。まとめそもそも文字コードとは文字コードといえば、UTF-8とかShift-JISとかUnicodeとかASCIIとか、そこらへんが出てくる。概念を改めて確認すると、サクっと一言で説明すると、コンピュータの世界における「文字に割り当てられた数字」が「文字コード(モジコード)」です。「表現される文字のもとになっている数字」と言った方が正確ですけどね。分かりくいので「文字に割り当てられた数字」と覚えてください。code)とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典とにかく文字コードとは、文字と機械語を関連付けている規格であることはざっくりと認識している。いう複数段階の処理が走っている。機械語への変換作業は複数段階で行われるイメージは以下の通り。あ」のエンコーディングの流れは上の画像のようになる。「あ」にはUnicodeの規格にによって一意のコードを振られている。「あ」だけでなく全ての文字にこの一意のコードが振られている。0208などが該当する。呼ばれる規格によって変換する。この変換はエンコーディングとも呼ばれ、UTF-8、UTF-16、UTF-32、Shift-JIS(SJIS)、ISO-2022-JP(JIS)、EUC-JPなどよく聞く奴らがこれに該当する。0208はShift-JIS(SJIS)、ISO-2022-JP(JIS)、EUC-JPに対応する。ExcelのデフォルトはShift-JISであったりするらしい。符号単位列からバイト列への変換UTF-8やUTF-16によって変換されたものを「符号単位列」と呼ぶ。ファイルの読み書きや通信を行う場合、符号単位列をさらに変換し、バイト列にする必要がある。要は「0101010101...」のような01の羅列された形にしないと通信で使えないということ。BOM付きとか呼ばれるやつ符号単位列をバイト列にするときは、バイト順序(エンディアン)を気にしなければならない。エンディアンにはビックやリトルなど、複数種類があり、指定しないとコンピュータはどの順序でバイトが並べられているかわからない(エンディアンの説明はここで拙く書くよりググってもらった方が早いと思ったので省略)。そこで使用されるのがBOM(バイトオーダーマーク)と呼ばれるもので、どのエンディアンかを指定するために、符号化したテキストの先頭に数バイトのデータをつける。基本的に8ビット以外の符号単位列をバイト列に変換する際にBOMをつける必要がある。UTF-8の場合はこのBOMが本来必要ない。「このデータはUTF-8で符号化されているよ」とわかりやすくするためにあえてBOMをUTF-8に付与することもある。