Неверная строка, которую вы используете \ n \ u2705")
Это должен быть действительный строковый литерал " \\ uD83D \\ uDCDA \\ u2705 "
У вас есть строка -BMP символы в виде JSON String. И ваш 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 декодер может декодировать символы этого типа в эмодзи. Возможно, есть вероятность недействительности JSON
Сначала необходимо проверить, действительно ли json действительно или нет перед использованием.
ИСПОЛЬЗОВАНИЕ:
let jsonDecodedString = "Your string".jsonStringRedecoded
let decodedEmojiText = jsonDecodedString?.decodeEmoji
debugPrint("\(decodedEmojiText)")