Linux、MacとWindowsでの「〜」が気になったので、UTF-8について調べてみた。
Manpage of UTF-8
符号化
以下のバイト列が文字の表現に使用される。どのバイト列を使用するかは文字の UCS コード番号に依存する:0x00000000 - 0x0000007F:
0xxxxxxx
0x00000080 - 0x000007FF:
110xxxxx 10xxxxxx
0x00000800 - 0x0000FFFF:
1110xxxx 10xxxxxx 10xxxxxx
0x00010000 - 0x001FFFFF:
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
0x00200000 - 0x03FFFFFF:
111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
0x04000000 - 0x7FFFFFFF:
1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
ということは、1バイト目が
- 0x00〜0x7F:1バイトのバイト列
- 0xC0〜0xDF:2バイトのバイト列
- 0xE0〜0xEF:3バイトのバイト列
- 0xF0〜0xF7:4バイトのバイト列
- 0xF8〜0xFB:5バイトのバイト列
- 0xFC、0xFD:6バイトのバイト列
ということになるようだ。
それから、
UTF-8 - Wikipedia
BOMについて
UTF-8はエンディアンに関わらず同じ内容になるので、本来はBOM(Byte Order Mark)を付加する必要はないが、一部のエディターなどではBOMの有無を選択できる。この際、BOMありの方をUTF-8、なしの方をUTF-8Nと呼ぶこともあるが、このような使い分けは日本以外ではほとんど知られておらず、また公的規格などによる裏付けもないため、その使用には注意が必要である。
ということなので、エンディアンを気にせずにバイトストリームとして扱えばよいこともわかった。
そして件の「〜」だが、UTF-8のバイト列にすると
- Windows:0xEF 0xBD 0x9E
- Mac,Linux:0xE3 0x80 0x9C
であることから、"\xE3\x80\x9C" というバイト列を "\xEF\xBD\x9E" に変換すれば、Windowsでも「〜」が表示できるできることを確認した。
勉強になります。
最近のコメント