【问题标题】:C# Google translate without api and with unicode没有 api 和 unicode 的 C# Google 翻译
【发布时间】:2018-06-21 07:58:42
【问题描述】:

我想用谷歌翻译各种语言的字符串,而不用 C# 中的 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#/浏览器是:

C#:“Esegui il debug in modalità offline”

浏览器:“Esegui il debug in modalità offline”

好的!而且 à char 也是正确的

FR

C#:“Déboguer le mode hors connexion”

浏览器:“Déboguer le mode hors connexion”

好的!而且é char也是正确的

俄语

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

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

错了:-(

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

感谢您的帮助

帕特里克

【问题讨论】:

  • 还可以考虑使用 HTML Agility Pack (stackoverflow.com/questions/846994/how-to-use-html-agility-pack) 进行 HTML 解析。你现在的做法很奇怪。
  • 使用 UTF8 没有任何效果,甚至 à 或 è
  • 如果您检查返回的 HTML 的标题部分,您会看到它使用字符集 "windows-1251" - 这是专门针对西里尔字符的。您需要为此设置编码。
  • 听起来不错!!好的,但是怎么做呢?我设置了 webClient.Encoding = System.Text.Encoding.UTF8;结果实际上是 "
  • 一种方法是在第一次读取后检查字符集,如果不是默认设置,请设置正确的编码并再次下载。如果您确实设置了正确的编码,您会得到西里尔字符。首次下载后插入 "if (result.Contains("windows-1251")) { webClient.Encoding = System.Text.Encoding.GetEncoding("windows-1251"); result = webClient.DownloadString(url); }" 例如

标签: c# unicode google-translate


【解决方案1】:

如果您检查返回的 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”在标题部分中

【讨论】:

  • 我确实注意到捷克语版本根本没有翻译 - 不匹配 " 所以返回整个网页 - 我只是假设我做错了什么。如果它可以翻译 - 但字符集错误 - 检查使用的编码并添加“else if”以设置正确的字符集。
  • 是的,我就是这么做的,只是没有找到正确的字符集
  • 我发现我需要使用“|cs”而不是“|cz”来使捷克语翻译工作并且它使用 ISO-8859-2 编码。
  • 查看谷歌翻译 - 我发现它仍然使用“cs”,这是以前“捷克斯洛伐克”国家的代码,现已不复存在,“cs”正式不再使用。跨度>
猜你喜欢
  • 2019-03-22
  • 2019-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-18
  • 2011-07-01
相关资源
最近更新 更多