如何在 Flutter 应用程序中翻译字符串中的特殊字符?示例:"Déjà Vu" 到 "Déjà Vu"
How to translate special characters in a string in a Flutter application? Example: "Déjà Vu" to "Déjà Vu"
我是 Flutter 开发的新手,我正在尝试解码或 t运行slate 特殊字符。
我正在使用的示例看起来像这样在 flutter 中显示为普通文本:
Example: "Déjà Vu" to "Déjà Vu"
左边是 UI 上的样子,右边是我想看的结果。
我已经尝试通过文档使用 Runes
class --> https://api.dart.dev/stable/1.24.3/dart-core/Runes-class.html 但没有成功。
这是 non-working 代码:
child: Text(new Runes("Déjà Vu").string)
更新:我试图在 API 调用中传递 'Content-type': 'application/json; charset=utf-8',
,但它似乎没有解决这个特定问题。我将附上响应的快照(我 运行 它有新的 headers 也没有 )
代码如下:
Future<http.Response> _attemptCall(String suffix) => http.get(
'$kBaseURL$suffix',
headers: {
'Authorization': 'Bearer $_accessToken',
'Content-type': 'application/json; charset=utf-8',
},
);
Future<T> _authorizedCall<T>(
String suffix,
T Function(String) decode,
) async {
if (_accessToken == '') {
await refreshToken();
}
http.Response response = await _attemptCall(suffix);
var resBody = response.body;
print('This is the response --> $resBody');
if (response.statusCode == 401) {
await refreshToken();
response = await _attemptCall(suffix);
}
if (response.statusCode == 200) {
return decode(response.body);
}
return null;
}
@override
Future<Episode> getEpisodeDetails(String id) => _authorizedCall(
_episodeDetailUrl(id),
(s) => Episode.fromJson(jsonDecode(s)),
);
这个字符集重整称为 Mojibake(感谢 Randal Schwartz 指出!)
您无法将“似曾相识”改回“似曾相识”,您必须对数据的编码和发送方式或解码响应的方式采取措施。
查看这些 utf-8 字符的二进制表示:
11000011 10000011 Ã --> there is no way to tell `Ã` that it should be `à`
11000010 10101001 ©
11000011 10100000 à
11000011 10101001 é
您需要通过 API 响应解决上游问题:
Content-type: application/json; charset=utf-8
API 正在向您发送一个字节流,应该是 utf8 以避免这种输出。
或者你解码字节流的方式,你也可以改变:
return decode(response.body)
到
return decode(utf8.decode(response.bodyBytes));
我是 Flutter 开发的新手,我正在尝试解码或 t运行slate 特殊字符。 我正在使用的示例看起来像这样在 flutter 中显示为普通文本:
Example: "Déjà Vu" to "Déjà Vu"
左边是 UI 上的样子,右边是我想看的结果。
我已经尝试通过文档使用 Runes
class --> https://api.dart.dev/stable/1.24.3/dart-core/Runes-class.html 但没有成功。
这是 non-working 代码:
child: Text(new Runes("Déjà Vu").string)
更新:我试图在 API 调用中传递 'Content-type': 'application/json; charset=utf-8',
,但它似乎没有解决这个特定问题。我将附上响应的快照(我 运行 它有新的 headers 也没有
代码如下:
Future<http.Response> _attemptCall(String suffix) => http.get(
'$kBaseURL$suffix',
headers: {
'Authorization': 'Bearer $_accessToken',
'Content-type': 'application/json; charset=utf-8',
},
);
Future<T> _authorizedCall<T>(
String suffix,
T Function(String) decode,
) async {
if (_accessToken == '') {
await refreshToken();
}
http.Response response = await _attemptCall(suffix);
var resBody = response.body;
print('This is the response --> $resBody');
if (response.statusCode == 401) {
await refreshToken();
response = await _attemptCall(suffix);
}
if (response.statusCode == 200) {
return decode(response.body);
}
return null;
}
@override
Future<Episode> getEpisodeDetails(String id) => _authorizedCall(
_episodeDetailUrl(id),
(s) => Episode.fromJson(jsonDecode(s)),
);
这个字符集重整称为 Mojibake(感谢 Randal Schwartz 指出!)
您无法将“似曾相识”改回“似曾相识”,您必须对数据的编码和发送方式或解码响应的方式采取措施。
查看这些 utf-8 字符的二进制表示:
11000011 10000011 Ã --> there is no way to tell `Ã` that it should be `à`
11000010 10101001 ©
11000011 10100000 à
11000011 10101001 é
您需要通过 API 响应解决上游问题:
Content-type: application/json; charset=utf-8
API 正在向您发送一个字节流,应该是 utf8 以避免这种输出。
或者你解码字节流的方式,你也可以改变:
return decode(response.body)
到
return decode(utf8.decode(response.bodyBytes));