我从服务器获取文本,文本用ISO 8859-1
. 如何将其转换为 UTF-8?
现在我只是替换这样的特殊字符:
text = [text stringByReplacingOccurrencesOfString:@"É" withString:@"Ê"];
我从服务器获取文本,文本用ISO 8859-1
. 如何将其转换为 UTF-8?
现在我只是替换这样的特殊字符:
text = [text stringByReplacingOccurrencesOfString:@"É" withString:@"Ê"];
NSString* myString = [[NSString alloc] initWithData: theData
encoding: NSISOLatin1StringEncoding];
对于斯威夫特 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
}
我遇到了同样的问题。即使你得到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 编码的字符串。