iPhone - 转换ISO 8859-1(Latin-1)编码的文本

时间:2012-08-22 13:02:40

标签: iphone objective-c xcode cocoa-touch encoding

我从服务器获取文本,文本使用ISO 8859-1进行编码。 如何将其转换为UTF-8?

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

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

3 个答案:

答案 0 :(得分:3)

NSString* myString = [[NSString alloc] initWithData: theData 
                                           encoding: NSISOLatin1StringEncoding];

答案 1 :(得分: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编码的字符串。

答案 2 :(得分:0)

对于Swift 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
}