如何在 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 来扩展它。
如何在 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 字符动态显示,请告诉我。
问题已通过使用以下代码片段解决。
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 来扩展它。