4

我尝试使用 webclient 将单词“香蕉”翻译成 rus

private void button1_Click(object sender, EventArgs e)
    {
        Navigate("http://translate.google.ru/translate_a/t?client=x&text=Banana&hl=en&sl=en&tl=ru");
    }

    private void Navigate(String address)
    {
        WebClient client = new WebClient();            
        client.Proxy = WebRequest.DefaultWebProxy;
        client.Credentials = new NetworkCredential("user", "password", "domain");
        client.Proxy.Credentials = new NetworkCredential("user", "password", "domain");
        string _stranslate = client.DownloadString(new Uri(address));
    }

我想在“_stranslate”中看到

{"sentences":[{"trans":"Банан","orig":"Banana@","translit":"Banan@","src_translit":""}],"src":"en", “服务器时间”:0}

但得到了这个

{"sentences":[{"trans":"вБОБО","orig":"Banana@","translit":"Banan@","src_translit":""}],"src":"en", “服务器时间”:0}

有人能帮我吗?

4

3 回答 3

13

尝试检查响应标头,内容类型会告诉您应该使用什么编码。

Content-Type => text/javascript; charset=KOI8-R

所以只需添加这一行。

client.Encoding = Encoding.GetEncoding(20866);

或者

client.Encoding = Encoding.GetEncoding("KOI8-R");

编码的完整列表可以在编码类的文档中找到

另一种方法是仅用于System.Net.Mime.ContentType获取字符集。像这样:

byte[] data = client.DownloadData(url);
ContentType contentType = new System.Net.Mime.ContentType(client.ResponseHeaders[HttpResponseHeader.ContentType]);
string _stranslate = Encoding.GetEncoding(contentType.CharSet).GetString(data);
于 2012-04-06T12:54:03.350 回答
3

在你之前添加这个client.DownloadString()

client.Encoding = System.Text.Encoding.UTF8;

当您读取字符串时,您的编码可能会变得混乱。

使用此 HTTP 标头查看器并输入您的 URL,我在标头中看到以下内容:

Content-Type: text/javascript; charset=UTF-8
Content-Language: ru

基本上,您需要找出他们发回的编码并将您的编码设置为匹配。

在调用之前设置编码非常重要DownloadString()

于 2012-04-06T12:44:40.620 回答
0

恕我直言,更好的解决方案:添加 URI 查询参数 oe=UTF-8 并在任何地方使用 UTF-8

var nameValueCollection = new NameValueCollection
{
    {"client", "x"},
    {"text", HttpUtility.UrlEncode(text)},
    {"hl", "en"},
    {"sl", fromLanguage},
    {"tl", toLanguage},
    {"ie", "UTF-8"},
    {"oe", "UTF-8"}
};

string htmlResult;
using (var wc = new WebClient())
{
    wc.Encoding = Encoding.UTF8;
    wc.QueryString = nameValueCollection;
    htmlResult = wc.DownloadString(GoogleAddress);
}
于 2013-12-10T11:48:01.903 回答