2017-05-27 89 views
1

我試圖對Emojis進行編碼和解碼,將它們發送到我的數據庫。Swift編碼/解碼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

+1

你檢查,[這](https://gist.github.com/NarayanaRao35/3a69527a746e6cd688c21838e38e2e21)out? –

+0

因爲我不能夠觸摸服務器端,所以如果他們正在使用一種類型的編碼我需要做同樣的:/ –

+0

謝謝何塞它幫助我的鏈接 –

回答

7

你的編碼代碼可以被簡化爲

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

注意,它編碼所有非ASCII字符作爲\uNNNN,不僅 Emojis。通過反轉轉換完成解碼:

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類型的擴展方法,你可能想選擇更好的函數名。

+0

感謝您的回答,我已經修復了任何問題:) –

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)