为啥当我使用 nativescript 从 iOS 发送表情符号字符时会收到陌生字符串

Posted

技术标签:

【中文标题】为啥当我使用 nativescript 从 iOS 发送表情符号字符时会收到陌生字符串【英文标题】: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 (????) 时,我希望字符串看起来像 【参考方案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)

以上是关于为啥当我使用 nativescript 从 iOS 发送表情符号字符时会收到陌生字符串的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的模拟器不适用于 NativeScript?

Nativescript-vue原生iOS导航按钮在ActionBar上设置标题后消失

Nativescript 聊天 UI iOS 问题

无法从本地路径加载Nativescript vue中的图片,但是用http/https就可以了,为啥?

NativeScript 3.4:iOS 上的 WebView 性能缓慢

Nativescript 6.4.2 iOS webpack 不监视更改