无需登录 数据私有 本地保存

UTF-16编码解码工具 - 字符与十六进制序列互转

18
0
0
0

UTF-16 编码 / 解码工具

字符与十六进制序列互转 · 支持代理对 · LE/BE字节序 · 多种输出格式

文本输入 0 字符
编码 →
UTF-16 十六进制 0 字节
* 字节序影响基于字节的输出格式
字符数:0 BMP字符:0 补充字符:0 UTF-16字节数:0 码元数(16位):0

常见问题与知识点

UTF-16(16-bit Unicode Transformation Format)是一种变长字符编码,使用1个或2个16位码元来表示Unicode字符。

BMP字符(基本多文种平面,U+0000 ~ U+FFFF):使用1个16位码元(2字节)表示,如英文字母、中文汉字等。
补充字符(U+10000 ~ U+10FFFF):使用2个16位码元(代理对)(共4字节)表示,如emoji表情😀、𠮷等生僻汉字。

UTF-16是Java、JavaScript(内部)、Windows NT等系统的核心编码方式。
字节序(Byte Order)决定了16位码元在内存中的字节排列顺序:

UTF-16LE(小端序):低位字节在前。如字符U+0048(H)存储为48 00
UTF-16BE(大端序):高位字节在前。如字符U+0048(H)存储为00 48

BOM(字节顺序标记)是放在文本开头的特殊标记U+FEFF
• UTF-16LE的BOM:FF FE
• UTF-16BE的BOM:FE FF

BOM帮助解码器自动识别字节序。Windows系统通常使用UTF-16LE,网络传输通常使用UTF-16BE。
对于超出BMP范围的Unicode字符(码点 > U+FFFF,如emoji、部分生僻汉字),UTF-16使用代理对机制:

高代理(High Surrogate):范围 U+D800 ~ U+DBFF(共1024个值)
低代理(Low Surrogate):范围 U+DC00 ~ U+DFFF(共1024个值)

编码公式(码点 → 代理对):
高代理 = 0xD800 + ((码点 - 0x10000) >> 10)
低代理 = 0xDC00 + ((码点 - 0x10000) & 0x3FF)

解码公式(代理对 → 码点):
码点 = 0x10000 + ((高代理 - 0xD800) << 10) + (低代理 - 0xDC00)

代理对使得UTF-16能够表示超过100万个字符
特性UTF-8UTF-16
编码单元1字节(8位)2字节(16位)
ASCII字符1字节2字节
中文汉字3字节2字节
Emoji4字节4字节
字节序问题有(LE/BE)
适用场景网络传输、存储、HTML内存处理、Windows API、Java
UTF-16适合处理以亚洲文字为主的文本(中文、日文、韩文在UTF-16中仅需2字节,而在UTF-8中需3字节),也是许多编程语言和操作系统的内部编码。
识别UTF-16编码的常用方法:

1. 检查BOM:如果数据以FF FEFE FF开头,则几乎可以确定是UTF-16编码。
2. 字节模式分析:对于英文文本,UTF-16编码会呈现"每隔一个字节为00"的模式(如48 00 65 00 6C 00即"Hel")。
3. 代理对检测:检查是否存在合法的代理对序列(高代理后跟低代理)。
4. 统计方法:分析双字节值的分布是否符合Unicode字符的常见范围。

大多数文本编辑器(如VS Code、Notepad++)会自动检测BOM并选择正确的解码方式。