Python3を勉強している間に読んだ記事
中のUnicode/UTF-*の説明がとてもわかりやすかった。以下はそれを自分用に乱暴にまとめたもの。
Unicode
- すべての言語のすべての文字を表現するために設計されたシステム
- すべての文字や記号を4バイトの数値で表現
UTF-{32,16,8}
UTF-32
UTF-16
- ほとんどの文字を2バイトで表現
- めったに使われない文字を4バイトで表現
- エンディアンの問題あり
UTF-8
補足
UTF-8だとエンディアンの問題がないのでバラ色かというと結局そうとも言い切れない。エンディアンの種類を明示的に表すために付与する バイトオーダーマーク - Wikipedia がその原因。UTF-8ではエンディアンの問題がないのでBOMは本来不要なはずだが、ソフトによってBOM付きのUTF-8しか受け付けない場合やその逆の場合があり、我々を混乱させてくれる(参考:UTF-8 - Wikipedia)。