3

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

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

我注意到:

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

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

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

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

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

4

2 回答 2

0

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

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

于 2013-01-19T09:10:13.450 回答
0

谢谢马尔拜尔斯,你给了我提示。我已经阅读了什么是 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 博客。

于 2013-01-22T06:12:47.857 回答