iOS 5中的表情符号和UIWebView

Mic*_*all 5 cocoa-touch ios

我注意到我的应用程序中的表情符号已停止在iOS 5中的UIWebView上正常显示.

所有字符在显示时都会编码为HTML,输出HTML为:

<p>Emoji (iOS 4): &#55357;&#56850;</p>
Run Code Online (Sandbox Code Playgroud)

这个UTF-8编码的HTML在iOS 4中的UIWebView中正确呈现,但不在5中:

在此输入图像描述

我知道iOS 5中有一些关于表情符号的变化,但表情符号字符已被编码为�� 在iOS 5上生成,因此2字节字符应该是正确的.代码没有发生任何其他变化,所以它肯定是iOS 5引入的.

任何建议都将非常感谢,如果需要,我很乐意提供更多信息.谢谢.

Mic*_*all 10

我收到了开发者论坛回复:

iOS 5和Safari 5.1中的HTML解析器已更改,0xD800..0xDFFF(55296..57343)范围内的字符引用被视为解析错误并生成对象替换字符(通常呈现为带有问题的菱形)标记).这种行为改变与HTML5指定的一致.这意味着您不能再使用代理项对字符引用对字符进行编码.

一个相对简单的解决方案是使用单个字符引用而不是代理对.在您的示例中,使用0x1F612而不是(0xD83D,0xDE12).您可以使用十六进制或十进制:

😒 或😒

这解释了问题的原因.然而,我通过仅编码较小的字符子集来处理该问题,因为HTML文档是unicode.