你如何解码像 Swift 5 中的“\xc3\xa6”这样的 utf8 文字?
How do you decode utf8-literals like "\xc3\xa6" in Swift 5?
我正在从蓝牙特征中获取 WiFi SSID 的列表。每个 SSID 都表示为一个字符串,有些具有这些 UTF8 文字,例如“\xc3\xa6”。
我试过多种方法来解码这个像
let s = "\xc3\xa6"
let dec = s.utf8
我预计
print(dec)
> æ
等但它不起作用,它只会导致
print(dec)
> \xc3\xa6
如何在 Swift 5 中解码字符串中的 UTF-8 文字?
您只需解析字符串,将每个十六进制字符串转换为 UInt8
,然后使用 String.init(byte:encoding:)
:
对其进行解码
let s = "\xc3\xa6"
let bytes = s
.components(separatedBy: "\x")
// components(separatedBy:) would produce an empty string as the first element
// because the string starts with "\x". We drop this
.dropFirst()
.compactMap { UInt8([=10=], radix: 16) }
if let decoded = String(bytes: bytes, encoding: .utf8) {
print(decoded)
} else {
print("The UTF8 sequence was invalid!")
}
我正在从蓝牙特征中获取 WiFi SSID 的列表。每个 SSID 都表示为一个字符串,有些具有这些 UTF8 文字,例如“\xc3\xa6”。
我试过多种方法来解码这个像
let s = "\xc3\xa6"
let dec = s.utf8
我预计
print(dec)
> æ
等但它不起作用,它只会导致
print(dec)
> \xc3\xa6
如何在 Swift 5 中解码字符串中的 UTF-8 文字?
您只需解析字符串,将每个十六进制字符串转换为 UInt8
,然后使用 String.init(byte:encoding:)
:
let s = "\xc3\xa6"
let bytes = s
.components(separatedBy: "\x")
// components(separatedBy:) would produce an empty string as the first element
// because the string starts with "\x". We drop this
.dropFirst()
.compactMap { UInt8([=10=], radix: 16) }
if let decoded = String(bytes: bytes, encoding: .utf8) {
print(decoded)
} else {
print("The UTF8 sequence was invalid!")
}