提问人:Youmate 提问时间:12/27/2022 更新时间:12/27/2022 访问量:60
默认情况下,UTF-16 编码是否处理数据压缩?
Is UTF-16 encoding handles data compression by default?
问:
当我将id转换为data时,我有unicode char,த
UTF 8 -> 大小:3 字节 数组:[224, 174, 164]
UTF 16 -> 大小:4 字节 数组:[2980]
看起来很简单:UTF8 每个代码占用 1 个字节,UTF16 每个代码占用 4 个字节。但是,如果我在 macOS 中使用 Swift 编程语言使用“தததத”,
let tamil = "தததத"
let utf8Data = tamil.data(using: .utf8)!
let utf16Data = tamil.data(using: .utf16)!
print("UTF 8 -> Size: \(utf8Data.count) bytes Array: \(tamil.utf8.map({$0}))")
print("UTF 16 -> Size: \(utf16Data.count) bytes Array: \(tamil.utf16.map({$0}))")
然后输出是
UTF 8 -> 大小:12 字节阵列:[224, 174, 164, 224, 174, 164, 224, 174, 164, 224, 174, 164]
UTF 16 -> 大小:10 字节阵列:[2980、2980、2980、2980]
“தததத” 的 UTF16 数据 => 4x4 = 16 字节。但它是 10 字节,数组中只有 4 个代码。为什么会这样?6 个字节去哪儿了?
答:
1赞
deceze
12/27/2022
#1
这些字符串的实际字节表示形式如下:
UTF-8:
e0ae a4e0 aea4 e0ae a4e0 aea4
UTF-16:
feff 0ba4 0ba4 0ba4 0ba4
UTF-8 表示形式是 4 倍。
UTF-16 表示形式是 4 加 1 前导 BOM 的倍数。e0aea4
0ba4
feff
UTF-16 文本应以 BOM 开头,但这只需要在字符串开头出现一次,而不是每个字符一次。
评论