你如何解码像 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!")
}