为什么当我使用 nativescript 从 iOS 发送表情符号字符时,我会得到陌生的字符串
Why i get stranger string when i send emoji character from iOS with nativescript
我在服务器端使用 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)
}
}
这个 returns 是可选的,因为它可能因无效输入而失败。
示例:
let s = "Hello ."
let e = encode(s)
print(e) // Hello \ud83d\ude03.
if let d = decode(e) {
print(d) // Hello .
}
您可能想要选择更好的函数名称,我希望它能奏效。
我在服务器端使用 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)
}
}
这个 returns 是可选的,因为它可能因无效输入而失败。
示例:
let s = "Hello ."
let e = encode(s)
print(e) // Hello \ud83d\ude03.
if let d = decode(e) {
print(d) // Hello .
}
您可能想要选择更好的函数名称,我希望它能奏效。