如何将Unicode字符串(\ u00e2等)转换为NSString进行显示?

时间:2010-05-14 05:03:34

标签: objective-c cocoa unicode

我正在尝试支持来自各种国际用户的任意unicode。他们已经将大量数据放入他们的iPhone上的sqlite数据库,现在我想将数据捕获到数据库中,然后将其发送回他们的设备。现在我正在使用一个从互联网mysql数据库发回数据的php页面。数据正确地保存在mysql数据库中,但是当它被发回时,它会以unicode文本形式出现,例如

  

Frank \ u00e2 \ u0080 \ u0099s iPad

而不仅仅是

  

弗兰克的iPad

撇号应该是一个撇号撇号。

The answer posted to another question表示没有内置的Cocoa方法将unicode字符串的“\ u00e2 \ u0080 \ u0099”部分从Web服务器转换为NSString对象。这是对的吗?

这看起来真的很令人惊讶(并且非常令人失望),因为Cocoa肯定允许来自许多不同Unicode字符的输入,我需要支持我从未听说过的任何语言,以及所有可能的字符。我现在将它们保存到本地sqlite数据库中,但是一旦我将它发送到Web服务器,然后可能会删除不同的数据,我想确保从Web服务器中提取的数据格式正确。

3 个答案:

答案 0 :(得分:5)

  

[...]没有内置的Cocoa方法来转换[...]。这是   正确的吗?

这不正确。

您可能对CFStringTransform及其功能感兴趣。它是一个完整的ICU转换引擎,可以(也)执行您要求的转换。

请参阅Using Objective C/Cocoa to unescape unicode characters, ie \u1234

答案 1 :(得分:2)

所有NSStrings都是Unicode。

Frank\u00e2\u0080\u0099s iPad”数据的问题不在于它是Unicode;就是它被转义为ASCII。 “Frank’s iPad”在任何UTF中都是有效的Unicode,是您所需要的。

因此,您需要查看数据库是否正在返回数据转义,或者PHP层是否在某个时候转义它。如果是这种情况,请尽可能修理; PHP资源应该返回UTF-8/16/32。只有当这种方法失败时,你才能寻求在Cocoa方面取消字符串。

你是正确的,没有内置的方法来解决Cocoa中的字符串。如果你达到这一点,看看你是否能找到一些开源代码来做到这一点;如果没有,你需要自己动手,可能是使用NSScanner。

答案 2 :(得分:0)

检查您的网络服务响应是否包含内容类型和字符集。此外,xml已指定编码。在PHP中,您需要在打印XML之前添加以下内容:

header('Content-type:text / xml; charset = UTF-8'); print'<?xml version =“1.0”encoding =“UTF-8”?>';

我猜没有指定编码。