Swift编码/解码表情符号

时间:2017-05-27 19:24:11

标签: swift encode emoji

我正在尝试编码和解码Emojis以将它们发送到我的数据库。

我用它来编码:

var comentario = String()
let data = Comment.data(using: String.Encoding.nonLossyASCII, allowLossyConversion: true)
if let data = data {
    let emojiString = NSString(data: data, encoding: String.Encoding.utf8.rawValue)! as String
    comentario = emojiString
}

它有效。但现在我不知道如何解码表情符号。

这是编码的类型---> \ ud83d \ ude1a

2 个答案:

答案 0 :(得分:19)

您的编码代码可以简化为

func encode(_ s: String) -> String {
    let data = s.data(using: .nonLossyASCII, allowLossyConversion: true)!
    return String(data: data, encoding: .utf8)!
}

请注意,它不仅将所有非ASCII字符编码为\uNNNN 表情符号。通过反转变换来完成解码:

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

当然你也可以将代码定义为扩展方法 String类型,您可能希望选择更好的函数名称。

答案 1 :(得分:1)

我修好了。如果您的服务器具有编码utf8mb4,那么对于编码表情符号,请使用以下代码:

var comentario = String()
let data = Comment.data(using: String.Encoding.nonLossyASCII, allowLossyConversion: true)
if let data = data {
    let emojiString = NSString(data: data, encoding: String.Encoding.utf8.rawValue)! as String
    comentario = emojiString
}// comentario contains the emoji encoded

解码:

let data = comentarios.data(using: String.Encoding.utf8, allowLossyConversion: false)

    if data != nil{
        let valueunicode = NSString(data: data!, encoding: String.Encoding.nonLossyASCII.rawValue) as? String

        if valueunicode != nil{
            comentarios = valueunicode!
        }
    }//comentarios contantes the deecode string(emoji)