Character encoding NSString到cString UTF-8转换问题
我在将NSString转换为UTF8 cString时遇到了奇怪的编码问题。我正在从Web服务器获取XML数据。XML使用UTF-8编码正确编码。获取数据后,我将其转换为NSString,如下所示:Character encoding NSString到cString UTF-8转换问题,character-encoding,nsstring,Character Encoding,Nsstring,我在将NSString转换为UTF8 cString时遇到了奇怪的编码问题。我正在从Web服务器获取XML数据。XML使用UTF-8编码正确编码。获取数据后,我将其转换为NSString,如下所示: NSString *XMLdata = [[[NSString alloc] initWithData: receivedData encoding: NSUTF8StringEncoding] autorelease]; 当我使用NSLog将结果写入stdout时,输出似乎正常(所有字符都可读)
NSString *XMLdata = [[[NSString alloc] initWithData: receivedData encoding: NSUTF8StringEncoding] autorelease];
当我使用NSLog将结果写入stdout时,输出似乎正常(所有字符都可读)
但是,当我尝试使用[XMLData UTF8String]或[XMLData cStringWithEncoding:NSUTF8StringEncoding]获取cString时,非ascii字符(在本例中为德语)是固定的(例如“N√“纽伦堡”而不是“纽伦堡”)
我不知道那有什么问题。我是遗漏了什么还是有什么问题
感谢您的帮助,谢谢!
马特斯马特斯,你做得对。两种转换都做得很好,显然您得到了正确的输出。您看到的奇怪结果是NSLog没有使用UTF-8编码解释C字符串的结果 试试下面的代码。我把“纽伦堡”的UTF-8编码放在
s[]
中。u
字符由两字节序列0xc3、0xbc表示。其余字符的编码与其ASCII等效字符相同。(使用和验证)
在调试器的控制台窗口中,应获得以下信息:
Nürnberg
2009-08-12 23:55:53.077 try8[4980:813] Nürnberg
ü
您在NSLog输出中看到的字符来自。如果您按照链接进行操作,您会发现0xc3确实映射到√代码>字符,0xbc映射到º
。显然,这是NSLog对C字符串的编码。谢谢您的回复,但我的问题是,不仅NSLog显示错误的字符,而且当解析XML(使用TinyXML)并将数据保存到sqlite db(使用CoreData)时,错误的字符也会保存在那里
我知道这些字符是多字节序列,但我不明白为什么它在转换为cString时显然没有正确处理
不管怎样,现在我尝试调用[XMLData cStringWithEncoding:NSMacOSRomanStringEncoding],这就成功了——所以感谢您给我指明了方向
顺便问一下,您知道如何确定系统使用的编码吗?阅读参考资料时,我意识到编码取决于系统设置(语言、区域等)。我试图通过调用[NSString defaultCStringEncoding]来解决这个问题,但它返回nil。。。我想知道是否有一些一致的方法来处理各种编码的情况(下一次我可以面对东欧或其他任何情况)
再次感谢你,贝斯特
席子
Nürnberg
2009-08-12 23:55:53.077 try8[4980:813] Nürnberg