【问题标题】:Why i get stranger string when i send emoji character from iOS with nativescript为什么当我使用 nativescript 从 iOS 发送表情符号字符时会收到陌生字符串
【发布时间】:2019-07-05 15:54:56
【问题描述】:

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

请给我一些解决方案,或者告诉我我的错误。

谢谢。

【问题讨论】:

    标签: ios node.js nativescript emoji nativescript-vue


    【解决方案1】:

    您的编码代码可以简化为

    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 ?.
    }
    

    您可能想选择更好的函数名称,我希望这能奏效。

    【讨论】:

    • 谢谢,你给了我一个启示,最终的解决方案是发送时使用 encodeURI(string),存储到 MongoDB 时使用 decodeURI(string)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多