解码 UTF8 符号

Decode UTF8 symbols

我在swift中有一个字符串:

let flag = "Cattì ò"

我正在尝试转换 UTF8 符号。

我试过使用

stringByRemovingPercentEncoding

但注意到变化。如何正确转换符号?

欢迎来到编码猜谜游戏!看起来在路径的某个地方,您的字符串没有获得正确的代码页。这是一种猜测方式:

let flag = "Cattì ò"

let encodings = [NSASCIIStringEncoding,
    NSNEXTSTEPStringEncoding,
    NSJapaneseEUCStringEncoding,
    NSUTF8StringEncoding,
    NSISOLatin1StringEncoding,
    NSSymbolStringEncoding,
    NSNonLossyASCIIStringEncoding,
    NSShiftJISStringEncoding,
    NSISOLatin2StringEncoding,
    NSUnicodeStringEncoding,
    NSWindowsCP1251StringEncoding,
    NSWindowsCP1252StringEncoding,
    NSWindowsCP1253StringEncoding,
    NSWindowsCP1254StringEncoding,
    NSWindowsCP1250StringEncoding,
    NSISO2022JPStringEncoding,
    NSMacOSRomanStringEncoding,
    NSUTF16StringEncoding,
    NSUTF16BigEndianStringEncoding,
    NSUTF16LittleEndianStringEncoding,
    NSUTF32StringEncoding,
    NSUTF32BigEndianStringEncoding,
    NSUTF32LittleEndianStringEncoding]

for encoding in encodings {
    if let bytes = flag.cStringUsingEncoding(encoding),
        flag_utf8 = String(CString: bytes, encoding: NSUTF8StringEncoding) {
        print("\(encoding): \(flag_utf8)")
    }
}

数组包含所有encodings that Cocoa supports

从结果来看,您的字符串似乎是在 NSISOLatin1StringEncoding (a.k.a ISO-8859-1) 中编码的,这是 HTML 4.01 的默认编码。这给出了 UTF-8 中的 Cattì ò,与您想要的结果不完全匹配,但在所有代码页中是最接近的。

其他好的候选者是 NSWindowsCP1252StringEncodingNSWindowsCP1254StringEncoding 所以我建议您检查其他字符串。