我从服务器获取文本,文本使用ISO 8859-1
进行编码。
如何将其转换为UTF-8?
现在我只是替换这样的特殊字符:
text = [text stringByReplacingOccurrencesOfString:@"É" withString:@"Ê"];
答案 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
}