C# 谷歌翻译,不带 api 且带 unicode

标签 c# unicode google-translate

我想使用 google 来翻译各种语言的字符串,而不使用 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#/浏览器的结果是:

IT

C#: "Esegui il debug in modalità offline"

Browser: "Esegui il debug in modalità offline"

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

FR

C#: "Déboguer le mode hors connexion"

Browser: "Déboguer le mode hors connexion"

好的!而且 é 字符也是正确的

Russian

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

Browser: "Режим отладки в автономном режиме"

错误:-(

保加利亚语和捷克语也有同样的问题。 我尝试更改所有 webClient.Encoding = System.Text.Encoding.Default;选项但这没有帮助。

感谢您的帮助

帕特里克

最佳答案

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

在下载页面之前可能有更好的方法来获取 header 信息,但是如果您愿意下载页面两次 - 那么您可以检查使用的字符集,如果它是“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”位于 header 部分

关于C# 谷歌翻译,不带 api 且带 unicode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50963296/

相关文章:

c# - 使用 c# wpf 将 txt 文件保存到可移动驱动器

c# - 如何通过网络服务通信验证调用者

c# - 用于 FTP 的文件系统观察器

javascript - 谷歌翻译 : TranslateElement is not a function

localization - 是否有将美国英语 (en_US) 转换为英国英语 (en_GB) 的 API?

c# - 逐行截取方法

java - 为什么这个 unicode 字符以 UTF-16 编码结束为 6 个字节?

testing - 我需要一个无法使用多个代码页正确转换为 ANSI 的字符串

javascript - 多字节字符占用的字符数在 JavaScript 和 MySQL 中是不同的

c++ - 如何通过 C++ 使用 Google Translate API