我在服务器端使用 Nativescript + Vuejs 和 Nodejs + MongoDB 开发应用程序,当我从我的 iOS (12.1.4) 向 Nodejs 服务器发送表情符号时遇到了问题。
例如,当我发送表情符号 SMILING FACE WITH HEART-SHAPED EYES (😍) 时,我希望该字符串看起来像 😍 可以转换为表情符号并存储在 MongoDB 中
但是得到这个字符串:\M-p\M^_\M^X\M^M
在这种情况下最奇怪的是它只发生在我从我的 iOS 6 设备发送时。
使用 iOS 8 模拟器,表情符号发送操作正常。
所以,我真的不知道这个问题的根源是什么,可能是我的设备或键盘配置或 UTF ...
我得到的一些表情符号的字符串列表:
😀:\M-p\M^_\M^X\M^@
😃:\M-p\M^_\M^X\M^C
😎:\M-p\M^_\M^X\M^N
🔥:\M-p\M^_\M^T\M-%
😡:\M-p\M^_\M^X\M-!
一些文档:
http://www.grumdrig.com/emoji-list/
https://apps.timwhitlock.info/emoji/tables/unicode
请给我一些解决方案,或者告诉我我的错误。
谢谢。
最佳答案
你的编码代码可以简化为
extension String {
func encode(_ s: String) -> String {
let data = s.data(using: .nonLossyASCII, allowLossyConversion: true)!
return String(data: data, encoding: .utf8)!
}
}
请注意,它将所有非 ASCII 字符编码为\uNNNN,而不仅仅是表情符号。解码是通过反转转换来完成的:
extension String {
func decode(_ s: String) -> String? {
let data = s.data(using: .utf8)!
return String(data: data, encoding: .nonLossyASCII)
}
}
这会返回一个可选的,因为它可能因无效输入而失败。
例子:
let s = "Hello 😃."
let e = encode(s)
print(e) // Hello \ud83d\ude03.
if let d = decode(e) {
print(d) // Hello 😃.
}
您可能想要选择更好的函数名称,我希望这能奏效。
关于ios - 当我使用 nativescript 从 iOS 发送表情符号字符时,为什么我会得到陌生的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54642684/