WebClient возвращает неопознанную кодировку из Google Translate API? - PullRequest
0 голосов
/ 14 мая 2018

Я использую эту ссылку: https://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=en&dt=t&q=myTextHere

Когда я передаю его японским символам, таким как テ ス ト 中 ..., метод DownloadString возвращает странные символы, такие как этот: ム† ã, ¹ãƒä¸...

Правильная строка должна быть "Под тестом ..."

Вы можете сами убедиться, нажав на ссылку в своем браузере: https://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=en&dt=t&q=テスト中

IЯ пробовал несколько вещей, таких как установка кодировки клиента в UTF-8 и использование HttpUtility.UrlEncode(myText), но я не смог получить то, что возвращает мой браузер.Перестановка DownloadString для DownloadFile, поскольку txt возвращает тот же неверный текст.Как получить те же результаты, что и в браузере?

Вот небольшой фрагмент кода, который напоминает мою среду:

String s = "テスト中";
Console.WriteLine("src="+s);
WebClient client = new WebClient();
client.Encoding = Encoding.UTF8;
string downloadString = @client.DownloadString("https://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=en&dt=t&q=" + HttpUtility.UrlEncode(s));
Console.WriteLine("data:{\n"+downloadString+"\n}");

1 Ответ

0 голосов
/ 14 мая 2018

Понятия не имею, почему Google Translate API возвращает искаженные символы.Неверно сформированный ответ WebClient включает «fr» вместо «ja», предполагая, что API неправильно интерпретирует ваш текст как французский (!) Вместо японского.Или что-то.

В любом случае после некоторых экспериментов я обнаружил, что API ведет себя правильно, если вы установите заголовок User-Agent:

WebClient client = new WebClient();
client.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)");
client.Encoding = Encoding.UTF8;
string downloadString = client.DownloadString("https://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=en&dt=t&q=" + HttpUtility.UrlEncode(s));
// Result: [[["Under test","テスト中",null,null,3]],null,"ja",...]
...