ios - 当我使用 nativescript 从 iOS 发送表情符号字符时,为什么我会得到陌生的字符串

标签 ios node.js nativescript emoji nativescript-vue

我在服务器端使用 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/

相关文章:

ios - 对于 .xib 文件,我如何知道该文件的所有者属于哪个类?

ios - 从自定义相机捕获的图像在裁剪 iOS 后会旋转

android - 如何在 iOS/Android 中嵌入 NativeScript Angular 应用程序并从现有应用程序导航到某些路线

promise - fetch Promise 永远不会被执行

objective-c - 从Plist加载AVAudioPlayer文件URL

android - Android 上的离线 Web 应用程序 HTML5

node.js - 如何使用 Koa 修复 Azure Functions 中的 "Choose either to return a promise or call ' did'"

node.js - Heroku 上的 Node 应用程序段错误:std::bad_alloc 和退出代码 134

node.js - 当我提取图像数据时,它没有从 duckduckgo api 显示

nativescript - 如何在 NativeScript-Vue 中构建固定页脚?