Google ignoriert einfach Codierung in AcceptCharset
Header gesendet und gibt Antwort in ISO-8859-1
, wie Sie von verkürzten Antwort sehen:
HTTP/1.1 200 OK
Content-Type: text/html; charset=ISO-8859-1
Content-Language: en
Content-Length: 64202
<!DOCTYPE html><html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
Deshalb, wenn Sie Antwort mit UTF-8-Kodierung dekodieren, ungültig erhalten Figuren. Wenn Sie gerade machen wollen es schnell zu arbeiten, habe ich festgestellt, dass, wenn User-Agent
Header auf Anfrage hinzugefügt wird, gibt Google Antwort in UTF-8 und Sie können Rest des Codes lassen unmodifizierten:
private static string translate(string input, string languagePair)
{
string url = String.Format("https://translate.google.com/?hl=en&ie=UTF8&text={0}&langpair={1}", input, languagePair);
WebClient wc = new WebClient();
wc.Headers.Add(HttpRequestHeader.AcceptCharset, "utf-8");
wc.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/55.0");
wc.Encoding = Encoding.UTF8;
string result = wc.DownloadString(url);
int start = result.IndexOf("result_box");
string sub = result.Substring(start);
sub = sub.Substring(0, sub.IndexOf("</span>"));
start = sub.LastIndexOf(">");
sub = sub.Substring(start + 1);
return sub;
}
bessere Lösung ist, zu erkennen, Codierung als Antwort verwendet und für die Decodierung verwenden. WebClient
verfügt nicht über diese Erkennung eingebaut, so können Sie entweder Lösung beschrieben here oder HttpClient
stattdessen verwenden, die dies tut automatisch für Sie:
private static async Task<string> translate(string input, string languagePair)
{
string url = String.Format("https://translate.google.com/?hl=en&ie=UTF8&text={0}&langpair={1}", input, languagePair);
using (var hc = new HttpClient())
{
var result = await hc.GetStringAsync(url).ConfigureAwait(false);
int start = result.IndexOf("result_box");
string sub = result.Substring(start);
sub = sub.Substring(0, sub.IndexOf("</span>"));
start = sub.LastIndexOf(">");
sub = sub.Substring(start + 1);
return sub;
}
}
Bitte beachten Sie auch, dass Google Translation API hat, was könnte besser sein verwenden Sie lieber als die Übersetzung von der HTML-Seite zu analysieren.
bitte geben sie eingaben ('input' und' languagePair') –
beispiel eingang: würde, lp: de | de kehrt statt würde zurück – koin