当使用iOS键盘输入时,表情符号在NSAttributedString中不显示,在Android

时间:2015-10-06 20:57:39

标签: android ios nsattributedstring utf-16 emoji

我正在制作一个混合应用程序,当我从Android端发送表情符号时,它在iOS方面显示正常,但iOS方面不能(似乎)显示来自iOS自己键盘的表情符号!

我显示表情符号的标签使用了属性文本,文本来自HTML。以下代码用于生成NSAttributedString

var msg = getTextForDisplay()//Essentially gets the plain text
msg = "<span style=\"font-family: Helvetica; font-size:14pt;\">" + msg + "</span>"
if let data = msg.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false){
    let attributed = try? NSAttributedString(data: data, options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType ], documentAttributes: nil)
    return attributed
}

更奇怪的是,当我从iOS发送表情符号时,虽然它没有如上所述在标签中显示,但它确实在Android端显示完全正常。在iOS方面,在标签中,它显示了看似乱七八糟的东西(也许是unicode chasracters?)

例如:enter image description here

我绝对肯定错误是因为显示表情符号,因为当打印到控制台时,我看到真正的表情符号,当保存到设备存储器并稍后在Mac上阅读时,它是真正的表情符号。但是当表情符号加载到属性标签中时,它会显示乱码

感谢任何帮助。我知道这个问题与编码有关我只是不确定问题究竟是什么以及如何解决它

1 个答案:

答案 0 :(得分:2)

我们在评论中验证了源字符串是可以的。只有一个参数可以改变! Swift通常使用 UTF-16 作为字符串。你丢失了以UTF-8处理它的信息。

变化:

msg.dataUsingEncoding(NSUTF8StringEncoding

要:

msg.dataUsingEncoding(NSUTF的 16 StringEncoding