Swift编码/解码表情符号

7

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

我使用以下内容进行编码:

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


1
你有没有看过这个 - Jose Rosales
因为我无法接触服务器端,所以如果他们正在使用一种编码方式,我需要做相同的事情 :/ - user7781428
谢谢Jose,你的链接帮了我大忙。 - user7781428
1
如果您想回答自己的问题,那么请将解决方案发布为“答案”,而不是作为对问题的编辑。因此,我已经擅自撤销了您最后的编辑。 - Martin R
完成,谢谢建议。 - user7781428
2个回答

29

你的编码代码可以简化为

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

请注意,它编码了所有非ASCII字符,而不仅仅是表情符号(以\uNNNN表示,其中NNNN是Unicode字符的十六进制代码,或者以\NNN表示,其中NNN是八进制代码)。解码是通过反转这些转换来完成的。
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 .
}

当然,您也可以将代码定义为字符串类型的扩展方法,并且您可能想要选择更好的函数名称。


工作得很好。谢谢。 - Govindharaj Murugan
请注意,它将所有非ASCII字符编码为\uNNNN,不仅限于表情符号。错误,它将"ç"编码为"\347"。 - Charly Lafon
@CharlyLafon:你说得对。我已经调整了措辞。谢谢。 - Martin R

0

我已经解决了这个问题。如果您的服务器使用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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接