C#Google翻译不带api和unicode

时间:2018-06-21 07:58:43

标签: c# unicode google-translate

我想在C#中使用google和不使用api来翻译各种语言的字符串。 这是我的代码:

public string TranslateWithGoogle(string input, string languagePair)
{
    try
    {
        string url = String.Format("http://www.google.com/translate_t?hl=en&ie=UTF8&text={0}&langpair={1}", input, languagePair);
        WebClient webClient = new WebClient();
        webClient.Encoding = System.Text.Encoding.Default;
        string result = webClient.DownloadString(url);
        result = result.Substring(result.IndexOf("<span title=\"") + "<span title=\"".Length);
        result = result.Substring(result.IndexOf(">") + 1);
        result = result.Substring(0, result.IndexOf("</span>"));
        return result.Trim();
    }
    catch (Exception exc)
    {
        MessageBox.Show(exc.ToString());
        return string.Empty;
    }

}

所以现在涉及到C#与直接浏览器的测试时,我使用以下代码:

string strSource_String = "Debug offline mode";
string strSource_Language = "en";
string str_It = TranslateWithGoogle(strSource_String, strSource_Language+"|it");
string str_Fr = TranslateWithGoogle(strSource_String, strSource_Language + "|fr");
string str_De = TranslateWithGoogle(strSource_String, strSource_Language + "|de");
string str_Ru = TranslateWithGoogle(strSource_String, strSource_Language + "|ru");
string str_Bg = TranslateWithGoogle(strSource_String, strSource_Language + "|bg");
string str_Cz = TranslateWithGoogle(strSource_String, strSource_Language + "|cz");
string str_Pl = TranslateWithGoogle(strSource_String, strSource_Language + "|pl");

,结果C#/浏览器为:

  

IT

     

C#:“离线进行Esegui il调试”

     

浏览器:“以离线方式进行Esegui il调试”

好!而且àchar是正确的

  

FR

     

C#:“Déboguerle mode hors connexion”

     

浏览器:“Déboguerle mode hors connexion”

好!而且échar是正确的

  

俄语

     

C#:“Ðåæèìîòëàäêèâàââîíîìíììðåæèìå”

     

浏览器:“Режимотладкивавтономномрежиме”

错误:-(

,保加利亚语和捷克语也存在同样的问题。 我试图更改所有webClient.Encoding = System.Text.Encoding.Default;选项,但那无济于事。

感谢您的帮助

帕特里克

1 个答案:

答案 0 :(得分:3)

如果您检查返回的HTML的标题部分,您将看到它使用了字符集“ windows-1251”-专门用于西里尔字母。您需要为此设置编码。

在下载页面之前,可能会有更好的方法来获取标题信息,但是如果您愿意两次下载页面,则可以检查所使用的字符集,如果它是“ windows-1251”,则可以更改编码并再次下载。

类似的东西:

string result = webClient.DownloadString(url);
if (result.Contains("windows-1251"))
{
  webClient.Encoding = System.Text.Encoding.GetEncoding("windows-1251");
  result = webClient.DownloadString(url);
}
else if (result.Contains("ISO-8859-2"))
{
  webClient.Encoding = System.Text.Encoding.GetEncoding("ISO-8859-2");
  result = webClient.DownloadString(url);
}

您可能需要对其进行修改,以确保“ windows-1251”位于标题部分