我在服务器端使用Nativescript + Vuejs和Nodejs + MongoDB开发了一个应用程序,但是当我从iOS(12.1.4)将表情符号发送到Nodejs服务器时遇到了麻烦。
例如,当我发送带有心形眼睛的表情符号笑脸()时,我希望字符串看起来像&#x1f60d 可以转换为表情符号并存储在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
请给我一些解决方案,或者告诉我我的错误是什么。
谢谢。
答案 0 :(得分:1)
您的编码代码可以简化为
extension String {
func encode(_ s: String) -> String {
let data = s.data(using: .nonLossyASCII, allowLossyConversion: true)!
return String(data: data, encoding: .utf8)!
}
}
请注意,它不仅将Emojis编码为所有非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 .
}
您可能希望选择更好的函数名称,我希望这项工作可以实现。