Как закодировать строку урду в Dart?

Я извлекаю текст на урду из веб-адреса. Например, мой текст فروردین. Но когда я печатаю его, я вижу «ÙØ±ÙØ±Ø¯ÛÙ». Как правильно распечатать?

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);
  }

Как вы анализируете response.body? Я вижу, что вы вызываете метод parse(), но я не вижу реализации. Я предполагаю, что есть места, где вы не анализируете ввод с правильной кодировкой.

julemand101 10.04.2019 13:01

@julemand101 julemand101 Я отредактировал свой вопрос. Это будущее работает для удаления и печати английских текстов. Но я не знаю, как установить его для других языков.

Heyran.rs 10.04.2019 13:59

Опять же, где ваше определение метода parse()? Пожалуйста, предоставьте небольшой полный пример, который показывает вашу проблему.

julemand101 10.04.2019 14:47

Это встроенный метод Dart.

Heyran.rs 10.04.2019 15:06

Пожалуйста, дайте полный пример, который также показывает ваш импорт.

julemand101 10.04.2019 15:10

@julemand101 Готово.

Heyran.rs 10.04.2019 15:19

Итак, мы согласны с тем, что «Это встроенный метод в Dart» не соответствует действительности, но parse() — это метод из пакета html. ;)

julemand101 10.04.2019 15:25

Какую ОС и оболочку используете? Я знаю, что Windows cmd.exe имеет некоторые проблемы с символами UTF-8, может ли это быть причиной?

user10054228 10.04.2019 15:34
0
8
179
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема заключается в том, что клиент не распознает кодировку страницы и по умолчанию использует 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);
  }
}

Другие вопросы по теме