[英]Text with emoji is not decoding - iOS Swift
我使用以下代碼對包含表情符號的字符串進行編碼/解碼。
extension String {
func encodeEmoji() -> String {
let data = self.data(using: .nonLossyASCII, allowLossyConversion: true)!
return String(data: data, encoding: .utf8)!
}
func decodeEmoji() -> String? {
let data = self.data(using: .utf8)!
return String(data: data, encoding: .nonLossyASCII)
}
}
我在下面這樣調用了這個函數。 轉換了“用戶”模型中的響應。
let user = User() // Loaded API's response in this model
let textWithEmoji = user.aboutMe.decodeEmoji() //Here, I am getting the string as the same as before decoding
lblAboutMe.text = textWithEmoji
以下是未解碼的編碼字符串:
“我也喜歡...\\n\✅ 笑\?\?\\n\✅ 看小說\?\?\\n\✅ 看電影\?\?\\n\✅ 去騎自行車\?\?\? \?\\♀\️\\n\✅ 長距離散步 \?\?\?\?\\♀\️\\n\✅ 做飯 \?\?\팍FuD\?uD\? n\✅ 旅行\?\?\?\?\?\?\?\?\?\?\?\?\\n\✅ 吃\?\?\?\?uDuDuDuD7棋盤游戲\♟\\n\✅去影院\?\?\\n我最喜歡的季節是秋天\?\?,我喜歡超級英雄電影\?\?\\♂\️,聖誕節是最美妙的時光年!\?\?"
您使用的字符串無效(“我也喜歡...\\n\✅ 笑\?\?\\n\✅ 閱讀小說\?\?\\n\✅ 看電影\?\?\\n\✅ ”)
它應該是有效的字符串文字“\\\?\\\?\\\✅”
您有一個 JSON 字符串形式的字符串非 BMP 字符。 而且您的 decodeEmoji 無法將它們轉換為有效字符。
所以我們需要對這樣的字符串進行強制轉換。
extension String {
var jsonStringRedecoded: String? {
let data = ("\""+self+"\"").data(using: .utf8)!
let result = try! JSONSerialization.jsonObject(with: data, options: .allowFragments) as! String
return result
}
}
之后,您需要使用以下函數從上面的字符串解碼表情符號。
extension String {
var decodeEmoji: String? {
let data = self.data(using: String.Encoding.utf8,allowLossyConversion: false);
let decodedStr = NSString(data: data!, encoding: String.Encoding.nonLossyASCII.rawValue)
if decodedStr != nil{
return decodedStr as String?
}
return self
}
}
通常 JSON 解碼器可以將這些類型的字符解碼為 emoji 可能存在無效 JSON 的機會
在使用之前首先需要驗證json這些東西是否有效。
用法:
let jsonDecodedString = "Your string".jsonStringRedecoded
let decodedEmojiText = jsonDecodedString?.decodeEmoji
debugPrint("\(decodedEmojiText)")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.