【问题标题】:Unicode character change after retrieving from server in iPhone从 iPhone 中的服务器检索后的 Unicode 字符更改
【发布时间】:2013-01-02 02:54:49
【问题描述】:

我有一个 iPhone 应用程序,我在其中通过 Web 服务将 UITextview 中的文本发送到服务器。在下一页中,我将通过 Web 服务显示来自服务器的 cmets 列表。一切正常,除非我在 UITextview 中插入表情符号/表情符号。

下一页显示方形框而不是一些表情符号字符(不是全部)。

我注意到:

  1. 工作:我从表情符号键盘在UITextview 中插入了一个表情符号字符,并将其代码打印在日志中,\u2601,并将此文本提交给服务器。在下一页中,我得到了相同的 unicode \u2601 并且工作正常。它显示了表情符号图标。

  2. 不工作:现在我从表情符号键盘在UITextview 中插入了另一个表情符号字符,并将其代码打印在日志中,\ud83d\udc16,并将此文本提交给服务器。在下一页中,我得到了一个与我发送的不同的 unicode 代码点:\uf416。 iPhone 无法识别这个 unicode,所以它给了我一个方框。

那么这里的问题是什么?仅当表情符号字符具有一对 unicode 代码点时,它才起作用。

存储评论的数据库是 MySQL 5.5 版。

为什么从服务器检索表情符号字符代码对时会发生变化?如何将检索到的 Unicode 解码为其原始形式以便 iPhone 可以识别?

【问题讨论】:

  • 字符 D800–DFFF 是surrogates
  • 你在 MySQL 中使用的是 utf8mb4 吗?
  • 是的,我在 MySql 中使用 utf8mb4
  • 使用utf8mb4有什么问题吗?
  • 在使用 BASE64 保存之前,尝试使用写入 MySQL 数据库的表情符号对文本进行编码。当然,您必须在从数据库中获取后对其进行解码。检查此页面以获取 BASE64 编码/解码stackoverflow.com/questions/392464/…

标签: iphone mysql objective-c unicode emoji


【解决方案1】:

Thanx Mar Byers,你给了我提示。我已经阅读了什么是 Unicode 平面、什么是代理以及它是如何工作的。我发现这实际上不是服务器问题,因为我的 SQL 服务器版本是 5.5,它具有字符集 uyf8mb4,我在 Comments 列中使用了该设置。

现在我在我的应用程序中使用 SBJSON 来解码从服务器获取的 json 响应的问题。SBJSON 在一个 unicode UTF16 中解码代理对(UTF16 UTF16),这就是为什么不显示带有代理对的表情符号的原因。 Apple 为 ios5 和更高版本的 os 引入了 json 库 NSJSONSerialization。我使用该库来解码 json 响应,我的代码就像魅力一样工作..:)

我从这里得到了解决方案

http://blog.manbolo.com/2011/12/12/supporting-ios-5-new-emoji-encoding

这里

http://blog.manbolo.com/2012/10/29/supporting-new-emojis-on-ios-6

感谢@Manbolo 博客。

【讨论】:

    【解决方案2】:

    字符 U+F416 位于私人使用区 (PUA) 之一中。

    很可能,在从应用程序到数据库并返回的过程中,一些代码用这个字符替换了表情符号。这可以是这种方式的任何组件,例如用于与服务、Web 服务、数据库接口或数据库本身通信的客户端库。尝试单独处理每一层,或者跟随角色穿过层来检查它是否仍然正确。

    【讨论】:

      猜你喜欢
      • 2011-07-31
      • 2015-07-22
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 2020-02-22
      • 2023-03-13
      • 1970-01-01
      相关资源
      最近更新 更多