【问题标题】:How to convert Unicode strings (\u00e2, etc) into NSString for display?如何将 Unicode 字符串(\u00e2 等)转换为 NSString 进行显示?
【发布时间】:2010-05-14 05:03:33
【问题描述】:

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

弗兰克\u00e2\u0080\u0099s iPad

而不仅仅是

弗兰克的 iPad

撇号应该是一个弯撇号。

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

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

【问题讨论】:

  • 想要跟进,我最终得到了一个解决方案,涉及更改我的 Web 服务器。我使用的 1and1 服务器将 sql 数据库中的数据作为转义的 Unicode 输出,而我从 HostGator 使用的另一台服务器以非转义的 ASCII 格式输出数据,正如我所希望的那样。我查找了许多潜在的解决方案,看来我确实必须更改服务器,因为 1and1 不允许我修改某些 MySQL 设置以使 Unicode 能够作为非转义字符发送。令人失望,但很高兴我想通了。

标签: objective-c cocoa unicode


【解决方案1】:

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

这是不正确的。

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

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

【讨论】:

    【解决方案2】:

    所有 NSString 都是 Unicode。

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

    因此,您需要查看数据库是否返回了转义的数据,或者 PHP 层是否在某个时间点对其进行了转义。如果是其中任何一种情况,请尽可能修复它; PHP 资源应返回 UTF-8/16/32。只有当该方法失败时,您才应该寻求在 Cocoa 端取消转义字符串。

    你说得对,在 Cocoa 中没有内置的方法来取消转义字符串。如果你达到了这一点,看看你是否能找到一些开源代码来做这件事;如果没有,你需要自己做,可能使用 NSScanner。

    【讨论】:

    【解决方案3】:

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

    header('内容类型: text/xml; charset=UTF-8'); print '';

    我猜只是没有指定编码。

    【讨论】:

    • 如果服务器返回 ASCII 转义序列,例如“\u00e2”,这将无济于事。只有当服务器返回解码为错误字符(从使用错误编码解码)的未转义或 XML 转义(如果数据是 XML)代码单元时,它才会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 2015-12-11
    • 1970-01-01
    相关资源
    最近更新 更多