【发布时间】:2015-10-06 20:57:39
【问题描述】:
我正在制作一个消息应用程序,当我从 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 字符?)
我绝对确定错误与表情符号的显示有关,因为当打印到控制台时,我看到了真实的表情符号,并且当保存到设备存储并稍后在 Mac 上阅读时,它是真实的表情符号。但是当表情符号加载到属性标签中时,它会显示乱码
感谢任何帮助。我知道这个问题与编码有关我只是不确定到底是什么问题以及如何解决它
【问题讨论】:
-
请分享 'getTextForDisplay' 功能。在与各种文本格式之间进行转换时,会出现很多问题,尤其是在使用 JSON 传递时。
-
@Ben 它从字面上返回一个带有纯文本的字符串,例如“Hello”
-
只是一个硬编码的字符串,还是从其他地方导入的字符串?
-
@Ben 已导入。它几乎可以是任何东西,但我已经用已知的字符串尝试过它并且它不起作用。我将在大约一个小时内发布一些示例字符串和输出
-
@Ben 在方法中添加以下行 print("GET TEXT FOR DISPLAY " + msg) 会打印:"GET TEXT FOR DISPLAY ????"
标签: android ios nsattributedstring utf-16 emoji