Swift Encode/decode emojis

2019-01-17 18:58发布

I'm trying to encode and decode Emojis to send them to my database.

I use this to encode:

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
}

And it works. But now I don't know how to decode the emoji.

This is the type of encode ---> \ud83d\ude1a

2条回答
仙女界的扛把子
2楼-- · 2019-01-17 19:18

I fixed this. If you have a server with encode utf8mb4, then for encoding emojis use this code:

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

DECODING:

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)
查看更多
乱世女痞
3楼-- · 2019-01-17 19:30

Your encoding code can be simplified to

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

Note that it encodes all non-ASCII characters as \uNNNN, not only Emojis. Decoding is done by reversing the transformations:

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

This returns an optional because it can fail for invalid input.

Example:

let s = "Hello                                                                     
查看更多
登录 后发表回答