Rob*_*bok 3 string unicode swift
我以为我很了解Swift中的Unicode标量,但是狗脸表情符号证明我错了.
for code in "".utf16 {
print(code)
}
Run Code Online (Sandbox Code Playgroud)
UTF-16代码是55357和56374.在十六进制中,那是d83d和dc36.
现在:
let dog = "\u{d83d}\u{dc36}"
Run Code Online (Sandbox Code Playgroud)
我没有收到带""的字符串,而是收到错误:
无效的unicode标量
我尝试使用UTF-8代码,但它也没有用.不抛出错误,但返回"ð"而不是狗脸.
这有什么不对?
该\u{nnnn}转义序列需要一个Unicode标值,而不是UTF-16表示(具有高和低的替代物):
for code in "".unicodeScalars {
print(String(code.value, radix: 16))
}
// 1f436
let dog = "\u{1F436}"
print(dog) //
Run Code Online (Sandbox Code Playgroud)
从UTF-16表示重建字符串的解决方案可以找到有没有办法在swift中从utf16数组创建一个字符串?.例如:
let utf16: [UInt16] = [ 0xd83d, 0xdc36 ]
let dog = String(utf16CodeUnits: utf16, count: utf16.count)
print(dog) //
Run Code Online (Sandbox Code Playgroud)