簡體   English   中英

帶有表情符號的文本未解碼 - iOS Swift

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM