UTF-16LE 和 UTF-16BE
UTF-16LE 和 UTF-16BE 都是双字节编码,但它们的主要区别在于字节顺序(即字节的排列顺序)。
UTF-16 的基本特性
-
双字节编码:
- UTF-16 使用 2个字节(16位) 来表示一个字符。
- 对于超出基本多语言平面(BMP,即 U+0000 到 U+FFFF)的字符,UTF-16 使用 4个字节(代理对,Surrogate Pair) 来表示。
-
字节顺序:
- UTF-16 有两种字节顺序:
- UTF-16LE(Little Endian):低字节在前,高字节在后。
- UTF-16BE(Big Endian):高字节在前,低字节在后。
- UTF-16 有两种字节顺序:
UTF-16LE 和 UTF-16BE 的区别
1. UTF-16LE(Little Endian)
- 字节顺序:低字节在前,高字节在后。
- 例如,字符
A
(Unicode 码点U+0041
)的编码为:- 低字节:
0x41
- 高字节:
0x00
- 存储顺序:
0x41 0x00
- 低字节:
2. UTF-16BE(Big Endian)
- 字节顺序:高字节在前,低字节在后。
- 例如,字符
A
(Unicode 码点U+0041
)的编码为:- 高字节:
0x00
- 低字节:
0x41
- 存储顺序:
0x00 0x41
- 高字节:
BOM(字节顺序标记)
UTF-16 文件通常以 BOM(Byte Order Mark) 开头,用于指示字节顺序:
- UTF-16LE 的 BOM 是
0xFF 0xFE
。 - UTF-16BE 的 BOM 是
0xFE 0xFF
。
如果没有 BOM,则需要通过其他方式推断字节顺序。
示例
以下是一个简单的示例,展示 UTF-16LE 和 UTF-16BE 的编码差异:
字符:A
(Unicode 码点 U+0041
)
- UTF-16LE:
0x41 0x00
- UTF-16BE:
0x00 0x41
字符:汉
(Unicode 码点 U+6C49
)
- UTF-16LE:
0x49 0x6C
- UTF-16BE:
0x6C 0x49
总结
- UTF-16LE 和 UTF-16BE 都是双字节编码,但它们的字节顺序相反。
- 对于超出 BMP 的字符(如 Emoji),UTF-16 使用 4 个字节(代理对)表示。
- 通过 BOM 可以区分 UTF-16LE 和 UTF-16BE。
希望这个解释能帮助你更好地理解 UTF-16LE 和 UTF-16BE 的区别!如果还有其他问题,欢迎随时提问!
- 版权申明:此文如未标注转载均为本站原创,自由转载请表明出处《博瑞博客》。
- 本文网址:http://blog.neacn.com/C/162.html
- 上篇文章:MFC窗口风格 WS_style/WS_EX_style(超详细)
- 下篇文章:C++ std