Я извлекаю текст на урду из веб-адреса. Например, мой текст فروردین. Но когда я печатаю его, я вижу «ÙØ±ÙØ±Ø¯ÛÙ». Как правильно распечатать?
import 'dart:convert';
import 'package:http/http.dart';
import 'package:html/parser.dart';
import 'package:html/dom.dart';
Future initiate() async {
var client = Client();
Response response = await client.get('https://www.varzesh3.com/');
var document = parse(response.body);
List<Element> links = document.querySelectorAll('tr.match-date > td.text-center');
for (var link in links) {
print(link.text)
//var bytes = utf8.encode(link.text);
}
@julemand101 julemand101 Я отредактировал свой вопрос. Это будущее работает для удаления и печати английских текстов. Но я не знаю, как установить его для других языков.
Опять же, где ваше определение метода parse()? Пожалуйста, предоставьте небольшой полный пример, который показывает вашу проблему.
Это встроенный метод Dart.
Пожалуйста, дайте полный пример, который также показывает ваш импорт.
@julemand101 Готово.
Итак, мы согласны с тем, что «Это встроенный метод в Dart» не соответствует действительности, но parse() — это метод из пакета html. ;)
Какую ОС и оболочку используете? Я знаю, что Windows cmd.exe имеет некоторые проблемы с символами UTF-8, может ли это быть причиной?
Проблема заключается в том, что клиент не распознает кодировку страницы и по умолчанию использует latin1. Пожалуйста, взгляните на следующий код, где я принудительно использую UTF-8 вместо этого, принимая ответ в виде байтов и конвертируя их в UTF-8 с помощью декодера utf8.
import 'dart:convert';
import 'package:http/http.dart';
import 'package:html/parser.dart';
import 'package:html/dom.dart';
main() async {
var client = Client();
Response response = await client.get('https://www.varzesh3.com/');
var document = parse(utf8.decode(response.bodyBytes), encoding: "utf8");
List<Element> links = document.querySelectorAll(
'tr.match-date > td.text-center');
for (var link in links) {
print(link.text);
}
}
Как вы анализируете response.body? Я вижу, что вы вызываете метод parse(), но я не вижу реализации. Я предполагаю, что есть места, где вы не анализируете ввод с правильной кодировкой.