表情符号和UIWebView在iOS 5

我注意到,在我的应用程序中的表情符号已经停止正确显示在iOS 5的UIWebView。

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

<p>Emoji (iOS 4): &#55357;&#56850;</p> 

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

在这里输入图像说明

据我所知,iOS 5在表情符号方面已经有了一些变化,但是表情符号字符已经被编码为&#55849;&#56850; 在iOS 5上生成,所以2个字节的字符应该是正确的。 代码没有发生其他变化,所以这是iOS 5引入的。

任何意见将不胜感激,如果需要,我会很乐意提供更多的信息。 谢谢。

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

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

一个相对简单的解决scheme是使用单个字符引用而不是代理对。 在你的例子中,而不是(0xD83D,0xDE12),使用0x1F612。 您可以使用hex或十进制:

&#x1f612; 或&#128530;

这解释了问题的原因。 然而,我通过只编码一个较小的字符子集来解决这个问题,因为HTML文档是unicode的。