4

webclient を使用して「Banana」という単語を 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", "server_time":0}

しかし、これを手に入れました

{"sentences":[{"trans":"вБОБО","orig":"Banana@","translit":"Banan @","src_translit":""}],"src":"en", "server_time":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 に答える