博瑞博客

青春是一个充满活力的季节,即便是我们失去了天使的翅膀,只要我们还有一颗青春的心,那么我们的生活依然能够如阳光般灿烂!......
现在位置:首页 > C/C++ > UTF-16LE 和 UTF-16BE

UTF-16LE 和 UTF-16BE

江湖    C/C++    2025-2-5    38    0评论

UTF-16LEUTF-16BE 都是双字节编码,但它们的主要区别在于字节顺序(即字节的排列顺序)。


UTF-16 的基本特性

  1. 双字节编码

    • UTF-16 使用 2个字节(16位) 来表示一个字符。
    • 对于超出基本多语言平面(BMP,即 U+0000 到 U+FFFF)的字符,UTF-16 使用 4个字节(代理对,Surrogate Pair) 来表示。
  2. 字节顺序

    • UTF-16 有两种字节顺序:
      • UTF-16LE(Little Endian):低字节在前,高字节在后。
      • UTF-16BE(Big Endian):高字节在前,低字节在后。

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-16LE0x41 0x00
  • UTF-16BE0x00 0x41

字符:(Unicode 码点 U+6C49

  • UTF-16LE0x49 0x6C
  • UTF-16BE0x6C 0x49

总结

  • UTF-16LE 和 UTF-16BE 都是双字节编码,但它们的字节顺序相反。
  • 对于超出 BMP 的字符(如 Emoji),UTF-16 使用 4 个字节(代理对)表示。
  • 通过 BOM 可以区分 UTF-16LE 和 UTF-16BE。

希望这个解释能帮助你更好地理解 UTF-16LE 和 UTF-16BE 的区别!如果还有其他问题,欢迎随时提问!

评论一下分享本文赞助博瑞

赞助博瑞X

扫码赞助博瑞
联系站长
博瑞博客
挤眼亲亲咆哮开心想想可怜糗大了委屈哈哈小声点右哼哼左哼哼疑问坏笑赚钱啦悲伤耍酷勾引厉害握手耶嘻嘻害羞鼓掌馋嘴抓狂抱抱围观威武给力
提交评论

清空信息
关闭评论