解码UTF8符号

时间:2016-03-13 15:57:04

标签: string swift2 utf8-decode

我在swift中有一个字符串:

let flag = "Cattì ò"

我正在尝试转换UTF8符号。

我尝试过使用

stringByRemovingPercentEncoding

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

1 个答案:

答案 0 :(得分:0)

欢迎使用编码猜谜游戏!看起来像路径的某个地方,你的字符串没有得到正确的代码页。这是猜测它的一种方法:

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,所以我建议您查看其他字符串。

相关问题