如何在 flutter 中动态显示来自 json 响应的 Unicode 笑脸

How to display Unicode Smiley from json response dynamically in flutter

如何在 flutter 中动态显示来自 json 响应的 Unicode 笑脸。当我将字符串声明为静态时,它可以正确显示,但从动态响应来看,它不能正确显示笑脸。

静态声明:(有效)

child: Text("\ud83d\ude0e\ud83d\ude0eThis is just test notification..\ud83d\ude0e\ud83d\ude0e\ud83d\udcaf\ud83d\ude4c")

动态响应:

"message":"\ud83d\ude4c Be Safe at your home \ud83c\udfe0",

当我解析并将此响应传递给 Text 时,它会将 Unicode 视为字符串并显示为字符串而不是笑脸 下面的代码用于显示带有笑脸的文本:

child: Text(_listData[index].message.toString().replaceAll("\\", "\"))

已经经历过这个:但它仅在单个 unicode 不能与多个 unicode 一起工作时才有效。

如果有人使用文本和 unicode 字符动态显示,请告诉我。

问题已通过使用以下代码片段解决。

  Client client = Client();
  final response = await client.get(Uri.parse('YOUR_API_URL'));
  if (response.statusCode == 200) {
    // If the server did return a 200 OK response,
    // then parse the JSON.
    final extractedData = json.decode(response.body.replaceAll("\\", "\"));
        }

这里我们需要将双反斜杠替换为单反斜杠,然后解码 JSON respone before set into Text 这样我们就可以像这样显示多个unicode:

final extractedData = json.decode(response.body.replaceAll("\", "\"));

希望这个回答对其他人有帮助

我会给非转义字符的另一个好的解决方案是: 第一 ->

  String s = "\ud83d\ude0e Be Safe at your home \ud83c\ude0e";

  String q = s.replaceAll("\\", "\");

这将打印并且无法转义字符:

\ud83d\ud83d Be Safe at your home \ud83c\ud83d

以上为输出。

所以我们可以做的是在解析时取消转义它们或使用:

String convertStringToUnicode(String content) {
  String regex = "\u";
  int offset = content.indexOf(regex) + regex.length;
  while(offset > 1){
    int limit = offset + 4;
    String str = content.substring(offset, limit);
//     print(str);
    if(str!=null && str.isNotEmpty){
      String uni = String.fromCharCode(int.parse(str,radix:16));
 
   
      content = content.replaceFirst(regex+str,uni);
//       print(content);
      
    }
    offset = content.indexOf(regex) + regex.length;
//     print(offset);
  }
  return content;
  
}

这将替换所有文字并将其转换为 unicode 字符以及 emoji 的结果和输出:

String k = convertStringToUnicode(q);
print(k);

 Be Safe at your home 

以上就是输出。 注意:上面给出的答案同样有效,但这只是当你想要一个 unescape 函数并且不需要使用第三方库时。

您可以使用带有多个 unescape 解决方案的 switch case 来扩展它。