如何在flutter中从json响应动态显示Unicode Smiley。当我将字符串声明为静态时它可以正确显示,但从动态响应中它不能正确显示笑脸。
静态声明:(工作)
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 视为字符串并显示为字符串而不是 Smiley 代码如下以显示带有笑脸的文本:
child: Text(_listData[index].message.toString().replaceAll("\\\\", "\\"))
已经通过这个:Question 但它只在单个 unicode 不能与多个 unicode 一起工作时有效。
任何处理过文本和 unicode 字符显示的人都请告诉我。
答案 0 :(得分:1)
我要为取消转义字符提供的另一个替代好解决方案是: 第一个 ->
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 扩展它。
答案 1 :(得分:0)
使用以下代码片段解决了问题。
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响应,我们可以像这样显示多个unicode:
<块引用>最终提取的数据 = json.decode(response.body.replaceAll("\\", "\"));
希望这个回答对其他人有帮助