【发布时间】: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