NSString中不同类型的UTF8解码

时间:2011-07-27 14:56:34

标签: iphone objective-c utf-8 nsstring

我搜索了很多关于UTF8解码的内容,但还没有找到答案。

我从NSXMLParser收到UTF-8解码NSString:

NSString *tempString = @"Test message readability is óké";

在某种程度上,我无法找到将此编码文本更改为:

的方法
Test message readability is óké

我可以告诉我尝试的所有选项,但我不认为这是必要的。可以请一些帮助吗?

日Thnx!

3 个答案:

答案 0 :(得分:4)

NSXMLParser将使用XML指定的字符编码处理文本。我相信在你的情况下,XML没有明确指定UTF-8。

文本似乎是ISO Latin 1.如果您无法对生成XML的服务器采取任何措施,那么您可以应用此hack:

char* tempString = [string cStringUsingEncoding:NSISOLatin1StringEncoding];
string = [NSString stringWithUTF8String:tempString];

我已经通过GDB提示测试来验证这是有效的:

po [NSString stringWithUTF8String:(char*)[@"Test message readability is óké" cStringUsingEncoding:5]]

答案 1 :(得分:3)

你做错了。你想要的是:

char *s = "Test message readability is óké";
//Note: this is a one-byte-character C string, not an NSString!
NSString *tempString = [NSString stringWithCString:s encoding:NSUTF8StringEncoding];

还要记住,在初始化字符串常量时,程序内存的实际内容取决于当前文件的编码。如果它已经是UTF-8,则字符将被双重编码 - 你将在C字符串中将字符Ã,³等编码为UTF8。

换句话说,使用字符串常量可能是一个错误的举动。请提供更多问题的背景信息。

答案 2 :(得分:1)

Standart编码和解码如下:

用于编码:

NSString *content =  [bodyTextView.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

用于解码:

NSString *decodedString = [msg.content stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];