Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WebClient从Google Translate API返回未知编码?_C#_.net_Encoding_Webclient_Google Translation Api - Fatal编程技术网

C# WebClient从Google Translate API返回未知编码?

C# WebClient从Google Translate API返回未知编码?,c#,.net,encoding,webclient,google-translation-api,C#,.net,Encoding,Webclient,Google Translation Api,我正在使用此链接: 当我给它喂食日文字符时,テスト中..., DownloadString方法返回奇怪的字符,如:テã、ãƒä¸ 正确的字符串应为“正在测试…” 通过单击浏览器上的链接,您可以自己查看: 我尝试了多种方法,例如将客户端的编码设置为UTF-8,并使用HttpUtility.UrlEncode(myText),但我无法获得浏览器返回的内容。将DownloadString替换为DownloadFile作为txt返回相同的错误文本。如何获得与浏览器相同的结果 下面是一个类似于我的环境

我正在使用此链接:

当我给它喂食日文字符时,テスト中..., DownloadString方法返回奇怪的字符,如:テã、ãƒä¸

正确的字符串应为“正在测试…”

通过单击浏览器上的链接,您可以自己查看:

我尝试了多种方法,例如将客户端的编码设置为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}");

我一点也不知道为什么谷歌翻译API会返回乱码字符。格式错误的WebClient响应包含“fr”而不是“ja”,这表明API将您的文本误解为法语(!)而不是日语。或者别的什么

在任何情况下,经过一些实验后,我发现如果设置用户代理头,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",...]

奇怪,但效果很好。当我说“结果与我的浏览器相同”时,我完全忽略了设置
用户代理
标题的可能性。谢谢不客气,谢谢你提出这个有趣的问题。