WebClient 从 Google 翻译 API 返回身份不明的编码?

WebClient returning unidentified encoding from Google Translate API?

我正在使用这个 link:https://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=en&dt=t&q=myTextHere

当我向 DownloadString 方法输入日文字符(例如,テスト中...)时 returns 奇怪的字符,例如:ム† ã,¹ãƒä¸ ...

正确的字符串应该是"Under Test..."

您可以通过点击浏览器上的 link 亲自查看:https://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=en&dt=t&q=テスト中

我尝试了多种方法,例如将客户端的编码设置为 UTF-8 并使用 HttpUtility.UrlEncode(myText),但我无法获得我的浏览器 returns。将 DownloadString 替换为 DownloadFile as txt returns 相同的错误文本。如何获得与浏览器相同的结果?

这是一个类似于我的环境的小代码片段:

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

完全不知道为什么Google翻译APIreturns乱码。格式错误的 WebClient 响应包括 "fr" 而不是 "ja",表明 API 将您的文本错误解释为法语 (!) 而不是日语。或者什么的。

无论如何,经过一些实验,我发现如果设置 User-Agent header:

,API 会正常运行
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",...]