1

我在将 NSString 转换为 UTF8 cString 时遇到奇怪的编码问题。我正在从网络服务器获取 XML 数据。XML 使用 UTF-8 编码正确编码。获取数据后,我将其转换为 NSString,如下所示:

NSString *XMLdata = [[[NSString alloc] initWithData: receivedData encoding: NSUTF8StringEncoding] autorelease];

当我使用 NSLog 将结果写入标准输出时,输出似乎没问题(所有字符都是可读的)。

但是,当我尝试使用 [XMLData UTF8String] 或 [XMLDdata cStringWithEncoding: NSUTF8StringEncoding] 获取 cString 时,非 ascii 字符(在这种情况下为德语)被搞砸了(例如“N√ºrnberg”而不是“Nürnberg”)。

我不知道这有什么问题。我错过了什么还是那个错误?

任何帮助表示赞赏,谢谢!马蒂斯

4

2 回答 2

3
于 2009-08-13T07:05:56.507 回答
0

感谢您的回复,但我的问题是不仅 NSLog 显示错误的字符,而且当解析 XML(使用 TinyXML)并将数据保存到 sqlite db(使用 CoreData)时,错误的字符也会保存在那里。

我知道这些字符是多字节序列,但我不明白为什么它在转换为 cString 时显然没有正确处理......

无论如何,现在我尝试调用 [XMLData cStringWithEncoding: NSMacOSRomanStringEncoding] 并且成功了 - 所以谢谢你指点我!

碰巧,您知道如何确定系统使用的编码吗?阅读参考资料,我意识到编码取决于系统设置(语言、区域等)。我试图通过调用 [NSString defaultCStringEncoding] 来弄清楚,但它返回 nil ......我想知道是否有一些一致的方法来处理各种编码的这种情况(下次我可以面对东欧或其他别的)。

再次感谢,最好的

马蒂斯

于 2009-08-13T08:09:29.607 回答