UTF-16默认是否处理数据压缩?Swift中泰米尔字符编码疑问
问题解析
1. UTF-16字节占用的核心误解
你之前误以为字符த的UTF-16编码占4字节,这是错误的:
த的Unicode码点为U+0B94,属于基本多语言平面(BMP)- BMP内的字符(码点 ≤ U+FFFF)在UTF-16中仅用2字节表示,只有超出BMP的字符才会使用4字节的代理对编码
- 你之前看到的「4字节数组: [2980]」,是混淆了码点值和字节数:2980是该字符码点的十进制形式(对应十六进制
0xB94),它的UTF-16编码实际是2字节的二进制数据
2. Swift中UTF-16数据大小为10字节的原因
Swift的String.data(using: .utf16)方法返回的是**带BOM(字节顺序标记)**的UTF-16数据:
- 4个
த字符的UTF-16编码总字节数:4 × 2字节 = 8字节 - BOM用于标识字节顺序(大端/小端),固定占用2字节
- 总计:
8 + 2 = 10字节,和你看到的输出完全匹配
3. UTF-16是否默认处理数据压缩?
UTF-16本身没有内置数据压缩逻辑,你遇到的字节数差异和压缩无关,完全是由「BOM的存在」和「BMP字符仅占2字节」这两个规则导致的。
内容的提问来源于stack exchange,提问作者Youmate
相关产品推荐
相关产品推荐

