Ios 表情符号在Swift中不显示

Ios 表情符号在Swift中不显示,ios,emoji,swift4,iphone7plus,Ios,Emoji,Swift4,Iphone7plus,我试图显示来自JSON响应的表情。当我们没有0时,它可以正常工作️⃣1.️⃣3.️⃣5.️⃣ 在下面的字符串中,不使用下面的字符串 var titleLabelString = \ud83d\ude0a\ud83d\ude18\u2626\ufe0f 0️⃣1️⃣3️⃣5️⃣ 我正在使用的函数: extension String { var decodeEmoji: String? { let data = self.data(using: String.Encoding

我试图显示来自JSON响应的表情。当我们没有0时,它可以正常工作️⃣1.️⃣3.️⃣5.️⃣ 在下面的字符串中,不使用下面的字符串

var titleLabelString = \ud83d\ude0a\ud83d\ude18\u2626\ufe0f 0️⃣1️⃣3️⃣5️⃣ 
我正在使用的函数:

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
}
}
像这样使用它:

titleLabelString = titleLabelString.decodeEmoji!

这有什么不对?

您在注释中显示的代码点:

U+005C U+0075 U+0064 U+0038 U+0033 U+0064 U+005C U+0075 U+0064 U+0065 U+0030 U+0061 U+005C U+0075 U+0064 U+0038 U+0033 U+0064 U+005C U+0075 U+0064 U+0065 U+0031 U+0038 U+005C U+0075 U+0064 U+0038 U+0033 U+0064 U+005C U+0075 U+0064 U+0065 U+0030 U+0032 U+0035 U+FE0F U+20E3 U+0033 U+FE0F U+20E3 U+0031 U+FE0F U+20E3 U+0030 U+FE0F U+20E3
表示如下所示的字符串:

\ud83d\ude0a\ud83d\ude18\ud83d\ude025️⃣3.️⃣1.️⃣0️⃣ (似乎您选择了另一个字符串,而不是您的问题。)

作为Swift中的有效字符串文字,它变为:

"\\ud83d\\ude0a\\ud83d\\ude18\\ud83d\\ude02\u{0035}\u{FE0F}\u{20E3}\u{0033}\u{FE0F}\u{20E3}\u{0031}\u{FE0F}\u{20E3}\u{0030}\u{FE0F}\u{20E3}"
无论如何,您有一个字符串,其中非BMP字符用类似于转义序列的JSON字符串表示。并且您的
decodemoji
无法将其转换为有效字符

您可以强制转换此类字符串:

extension String {
    var jsonStringRedecoded: String? {
        let data = ("\""+self+"\"").data(using: .utf8)!
        let result = try! JSONSerialization.jsonObject(with: data, options: .allowFragments) as! String
        return result
    }
}
(如果字符串可能包含更多元字符,则可能需要修改此代码。)

var titleLabelString=“\\ud83d\\ude0a\\ud83d\\ude18\\ud83d\\ude02\u{0035}\u{FE0F}\u{20E3}\u{0033}\u{FE0F}\u{20E3}\u{0031}\u{FE0F}\u{20E3}\u{

打印(titleLabelString.jsonStringRecoded)/->注释中显示的代码点:

U+005C U+0075 U+0064 U+0038 U+0033 U+0064 U+005C U+0075 U+0064 U+0065 U+0030 U+0061 U+005C U+0075 U+0064 U+0038 U+0033 U+0064 U+005C U+0075 U+0064 U+0065 U+0031 U+0038 U+005C U+0075 U+0064 U+0038 U+0033 U+0064 U+005C U+0075 U+0064 U+0065 U+0030 U+0032 U+0035 U+FE0F U+20E3 U+0033 U+FE0F U+20E3 U+0031 U+FE0F U+20E3 U+0030 U+FE0F U+20E3
表示如下所示的字符串:

\ud83d\ude0a\ud83d\ude18\ud83d\ude025️⃣3.️⃣1.️⃣0️⃣ (似乎您选择了另一个字符串,而不是您的问题。)

作为Swift中的有效字符串文字,它变为:

"\\ud83d\\ude0a\\ud83d\\ude18\\ud83d\\ude02\u{0035}\u{FE0F}\u{20E3}\u{0033}\u{FE0F}\u{20E3}\u{0031}\u{FE0F}\u{20E3}\u{0030}\u{FE0F}\u{20E3}"
无论如何,您有一个字符串,其中非BMP字符用类似于转义序列的JSON字符串表示。并且您的
decodemoji
无法将其转换为有效字符

您可以强制转换此类字符串:

extension String {
    var jsonStringRedecoded: String? {
        let data = ("\""+self+"\"").data(using: .utf8)!
        let result = try! JSONSerialization.jsonObject(with: data, options: .allowFragments) as! String
        return result
    }
}
(如果字符串可能包含更多元字符,则可能需要修改此代码。)

var titleLabelString=“\\ud83d\\ude0a\\ud83d\\ude18\\ud83d\\ude02\u{0035}\u{FE0F}\u{20E3}\u{0033}\u{FE0F}\u{20E3}\u{0031}\u{FE0F}\u{20E3}\u{

print(titleLabelString.jsonStringRedecoded)/->您使用的是系统字体还是自定义字体?您的第一行代码不是Swift格式的有效代码,因此不清楚您遭受的痛苦。你能告诉我们原始字符串的实际内容吗
print(titleLabelString.unicodeScalars.map{uc in String(格式:“U+%04X”,uc.value)}.joined(分隔符:“”)
@OOPer:实际字符串是“\ud83d\ude0a\ud83d\ude18\u2626\ufe0f 0”️⃣1.️⃣3.️⃣5.️⃣ " , 它按原样打印字符串,而不转换编码的表情。@MilanNosáľ:我使用的是Font Aweasome字体系列。
“\ud83d\ude0a\ud83d\ude18\u2626\ufe0f 0️⃣1.️⃣3.️⃣5.️⃣ “
在Swift中不是有效的字符串文字。请显示上面我的代码生成的准确输出。您使用的是系统字体还是自定义字体?您的第一行代码不是Swift格式,因此不清楚您的痛苦。您能给我们显示原始字符串的实际内容吗?
打印”(titleLabelString.unicodeScalars.map{uc in String(格式:“U+%04X”,uc.value)}.joined(分隔符:)
@OOPer:实际字符串是“\ud83d\ude0a\ud83d\ude18\u2626\ufe0f 0”️⃣1.️⃣3.️⃣5.️⃣ “,它按原样打印字符串,而不转换编码的表情。@MilanNosáľ:我使用的是字体Awesome字体系列。
”\ud83d\ude0a\ud83d\ude18\u2626\ufe0f 0️⃣1.️⃣3.️⃣5.️⃣ “
在Swift中不是有效的字符串文字。请显示上面我的代码生成的确切输出。