mangas
我的刮板代码
:
FormatException (FormatException: Bad UTF-8 encoding 0x22 (at offset 369))
给出错误的
Future<Manga> getMangaInfo(source) async{
final response = await _client.get(source);
var manga;
print(response.body);//error occurs here
final document = parse(response.body);
final mangaInfo = document.getElementsByClassName('tamanho-bloco-perfil');
for(Element infos in mangaInfo){
final infoCont = infos.getElementsByClassName('row');
//get titulo
Element tituloCont = infoCont[0];
final tituloH = tituloCont.getElementsByTagName('h2');
Element tituloCont2 = tituloH[0];
String titulo = '['+tituloCont2.text+']';
//print(titulo);
//get capa
Element capaCont = infoCont[2];
final capaImg = capaCont.getElementsByTagName('img');
Element capaCont2 = capaImg[0];
final capaUrl = capaCont2.attributes['src'];
//get caprecente
final capsPorNumero = document.getElementsByClassName('row lancamento-linha');
final caps = capsPorNumero[0].getElementsByTagName('a');
Element info = caps[0];
final numero = info.text.split(' ')[1];
final capRecenteUrl = info.attributes['href'];
manga = Manga(null,source,titulo,capaUrl,numero,capRecenteUrl);
}
return manga;
}
我还尝试使用
response.body
和解码,但仍然无法修复它
这里是指页面的链接:
https://unionleitor.top/perfil-manga/kimetsu-no-yaiba
我猜是问题是html头上以下元标记上的字符
response.bodyBytes
我还找不到解决方案,也许我只是看了错误的地方。
谁能帮我解决这个问题? thanks!
<meta name="description" content="Kimetsu no Yaiba - Novo mangá sobrenatural da Shonen Jump. O mangá conta a história de Tanjiro, o filho mais velho de uma família que �">
如果您要获得JSON
utf8.decode(response.bodyBytes);
在没有定义的CHARSET的情况下,HTTP被认为是在ISO-8859-1(Latin-1)中编码的。从描述中,身体与这种行为一致。 如果服务器响应将内容类型标头设置为应用程序/JSON; charset = UTF-8身体应按预期工作。
当然,问题是有一些服务器没有为JSON设置Charset(有效),但这也是两个规格之间的灰色区域:json总是应该是UTF-8,因此您不需要设置Charset,而是.. 除非明确设置Charset,否则HTTP始终是ISO-8859-1。 与HTTP定义相比,“智能” HTTP客户端可以选择遵循JSON定义,并简单地说任何应用程序/JSON默认情况下是UTF -8-从技术上讲违反HTTP标准。 但是,最终的解决方案最终是服务器明确说明按照这两个标准有效的CHARSET。
jsonDecode(utf8.decode(response.bodyBytes))
Solution2(颤音)
HttpClientRequest request = await HttpClient().post(_host, 4049, path) /*1*/
..headers.contentType = ContentType.json /*2*/
..write(jsonEncode(jsonData)); /*3*/
HttpClientResponse response = await request.close(); /*4*/
await response.transform(utf8.decoder /*5*/).forEach(print);
Sloute3(PHP)
使用PHP文件首先获取内容,然后使用您的URL 并使用str_replacephp
newString.replaceAll('�', '');
希望它有帮助
从您的后端,您需要使用内容类型发送响应:
$curlSession = curl_init();
curl_setopt($curlSession, CURLOPT_URL, 'YOUR-URL');
curl_setopt($curlSession, CURLOPT_BINARYTRANSFER, true);
curl_setopt($curlSession, CURLOPT_RETURNTRANSFER, true);
$jsonData = curl_exec($curlSession);
echo $bodytag = str_replace("�", "", $jsonData);
curl_close($curlSession);
application/json; charset=utf-8
这两种方法应解决您的问题:
wolder api:
utf-8
NewerAPI(在引擎盖下使用UTF8 -Decoder):
Utf8Decoder().convert(response.bodyBytes)
getter
utf8.decode(response.bodyBytes)
执行执行解码以获取其字符串值,但假设您的API会以UTF8格式返回,这就是为什么您可能会从解码中获得一些奇怪的字符