/// <summary>
/// 使用WebRequest获取Google翻译后的内容
/// </summary>
/// <param name="strTranslateString">需要翻译的内容</param>
/// <param name="strRequestLanguage">原文语种</param>
/// <param name="strResultLanguage">译文语种</param>
/// <returns></returns>
private string GetGoogleTranslateJSONString(string strTranslateString,string strRequestLanguage, string strResultLanguage)
{
string url = "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=";
WebRequest request = HttpWebRequest.Create(url + strTranslateString + "&langpair=" + strRequestLanguage + "%7C" + strResultLanguage);
request.Credentials = CredentialCache.DefaultCredentials;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();//这句出错
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
reader.Close();
dataStream.Close();
response.Close();
return responseFromServer;
}这是我摘抄的一段代码,strTranslateString这个是待翻译内容,但是这个字段过长的话,服务器会报414错误,也就是说URL过长,请问各位兄弟怎么解决的,我现在做一个小程序,需要把数据库里字段翻译成中文,但是这个字段太长,以上这个方法翻译短的没问题,谢谢各位了,救急啊。
byte[] data = encoding.GetBytes("");
HttpWebRequest myRequest =(HttpWebRequest)WebRequest.Create("");
myRequest.Method = "POST";
myRequest.ContentType="application/x-www-form-urlencoded";
string payload ="v=1.0&q=" + strTranslateString + "&langpair=" + strRequestLanguage + "%7C" + strResultLanguage;
string str_return = string.Empty;
WebRequest req = WebRequest.Create("http://ajax.googleapis.com/ajax/services/language/translate?");
req.Credentials = CredentialCache.DefaultCredentials;
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.Timeout = 10000;
req.ContentLength = payload.Length;
Encoding encoding = Encoding.GetEncoding("UTF-8");
Byte[] bytes = encoding.GetBytes(payload);
req.ContentLength = bytes.Length;
Stream newStream = req.GetRequestStream();
newStream.Write(bytes, 0, bytes.Length);
newStream.Close();
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
if (res.StatusDescription == "ok")
{
Console.WriteLine("暂时无法连接到网站");
Console.ReadKey();
}
Stream dataStream = res.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
str_return = responseFromServer;
reader.Close();
dataStream.Close();
res.Close(); return str_return;我已经改成POST方式了,但是长的翻译内容还是返回不对的JSON,奇怪啊
/// 翻译
/// </summary>
/// <param name="texts">需要翻译的内容</param>
/// <param name="languages">翻译语种</param>
/// <returns></returns>
private string china_to_english(string texts, string languages)
{
string payload = "hl=zh-CN&ie=UTF8&text=" +texts+ "&langpair=" +languages;
string s = "http://translate.google.com/translate_t" + payload;
string str_return = string.Empty;
WebRequest req = WebRequest.Create("http://translate.google.com/translate_t");
req.Credentials = CredentialCache.DefaultCredentials;
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.Timeout = 10000;
req.ContentLength = payload.Length;
Encoding encoding = Encoding.GetEncoding("UTF-8");
Byte[] bytes = encoding.GetBytes(payload);
req.ContentLength = bytes.Length;
Stream newStream = req.GetRequestStream();
newStream.Write(bytes, 0, bytes.Length);
newStream.Close();
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
if (res.StatusDescription == "ok")
{
Console.WriteLine("暂时无法连接到网站");
Console.ReadKey();
}
Stream dataStream = res.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
str_return = responseFromServer;
reader.Close();
dataStream.Close();
res.Close(); //str_return.Replace("?i:(.+)(\<div)(.+)(\>)(.+)(\<\/div\>)(.+))","$5");
str_return = GetStrFiltrateYH(str_return);
str_return.Substring(3);
return str_return;
}