0

我从服务器获取文本,文本用ISO 8859-1. 如何将其转换为 UTF-8?

现在我只是替换这样的特殊字符:

text = [text stringByReplacingOccurrencesOfString:@"É" withString:@"Ê"];
4

3 回答 3

2
NSString* myString = [[NSString alloc] initWithData: theData 
                                           encoding: NSISOLatin1StringEncoding];
于 2012-08-22T14:11:08.893 回答
0

对于斯威夫特 2.2

如果您的字符串是 HTML 编码的:

func replaceChars(htmlEncodedString: String) -> String {
    do {
        let encodedData = htmlEncodedString.dataUsingEncoding(NSUTF8StringEncoding)!
        let attributedOptions : [String: AnyObject] = [
            NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
            NSCharacterEncodingDocumentAttribute: NSUTF8StringEncoding
        ]
        let attributedString = try NSAttributedString(data: encodedData, options: attributedOptions, documentAttributes: nil)
        return attributedString.string
    } catch {
        fatalError("Unhandled error: \(error)")
    }
}

如果您的字符串采用 ISO 8859-1 (Latin-1) 编码:

func decodeISO88591(str:String) -> String {
   if let utfData = str.dataUsingEncoding(NSISOLatin1StringEncoding) {
       if let utf = String(data: utfData, encoding: NSUTF8StringEncoding) {
           return utf
       }
    }
    return str
}
于 2017-02-13T06:06:13.193 回答
0

我遇到了同样的问题。即使你得到data你收到的格式为 ISO 拉丁字符串,

NSString* latin1String = [[NSString alloc] initWithData:data encoding:NSISOLatin1StringEncoding];

或者如果文本是来自 latin1 字符串的 NSString,

NSData *utfData = [latin1String dataUsingEncoding:NSUTF8StringEncoding];
NSString *utf = [[NSString alloc] initWithData:utfData encoding:NSUTF8StringEncoding];

这是 NSJSONSerialization 特别需要的,因为它只接受 utf8 编码的字符串。

于 2016-11-16T14:47:21.520 回答