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

问题描述:

我试图支持来自各种国际用户的任意unicode。他们已经将一堆数据放到iPhones的sqlite数据库中,现在我想将数据捕获到数据库中,然后将其发送回他们的设备。现在我正在使用一个从网络mysql数据库发回数据的php页面。该数据被正确保存在MySQL数据库中,但是当它送回到它出来为Unicode文本,如如何将Unicode字符串( u00e2等)转换为NSString进行显示?

弗兰克\ u00e2 \ u0080 \ u0099s iPad的

,而不是仅仅

弗兰克的iPad

其中撇号确实应该卷曲的撇号。

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

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

+0

想接着,我终于得到了一个解决方案,涉及改变我的Web服务器的工作。我使用的1and1服务器是从sql数据库中输出数据作为转义的Unicode,而我从HostGator使用的另一台服务器以非转义的ASCII输出数据,正如我所希望的那样。 我查了很多潜在的解决方案,看来我确实必须更换服务器,因为1and1不允许我修改某些MySQL设置以使Unicode可以作为非转义字符发送。令人失望,但很高兴我明白了。 – 2011-11-22 16:26:59

所有NSString都是Unicode。

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

因此,您需要查看数据库是否正在返回转义数据,或者PHP层在某个时刻是否转义数据。如果其中任何一种情况发生,请尽可能修复; PHP资源应该返回UTF-8/16/32。只有在这种方法失败的情况下,你才会寻找可可方面的字符串。

你是对的,没有内置的方式来在可可中忽略字符串。如果你明白这一点,看看你是否可以找到一些开源代码来做到这一点;如果不是,你需要自己做,可能使用NSScanner。

+1

您可能感兴趣'CFStringTransform':http://*.com/questions/2099349/using-objective-c-cocoa-to-unescape-unicode-characters-ie-u1234/11615076#11615076 – 2012-07-23 15:03:03

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

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

我想没有指定编码。

+0

那不会如果服务器返回诸如“\ u00e2”之类的ASCII转义序列,则可以提供帮助。只有当服务器返回未转义或XML转义(如果数据是XML)代码单元解码为错误的字符(使用错误的编码解码)时,它才会有帮助。 – 2011-10-27 15:53:25

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

这是不正确的。

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

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