/// <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过长,请问各位兄弟怎么解决的,我现在做一个小程序,需要把数据库里字段翻译成中文,但是这个字段太长,以上这个方法翻译短的没问题,谢谢各位了,救急啊。

解决方案 »

  1.   

    你试试看在网页中用google翻译时,如果输入字符很长,没有报错的情况下,google是不是在url上做了处理?加入了什么其他的关键字?
      

  2.   

    和关键字没有关系,是不是和提交方式有关系,get不行,要用POST
      

  3.   

    HttpWebRequest 通过post传值
    byte[]  data = encoding.GetBytes("");
    HttpWebRequest myRequest =(HttpWebRequest)WebRequest.Create("");
    myRequest.Method = "POST";
    myRequest.ContentType="application/x-www-form-urlencoded";
      

  4.   

    ie中规定的url长度不得超过2083超长还是post吧
      

  5.   

    http://topic.csdn.net/u/20090702/16/bfa71dfb-dbe5-477f-b372-003893edbf60.html
      

  6.   


    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,奇怪啊
      

  7.   

    上面的代码返回了一个错误的JSON,错误时字符长长度超长,看来只能换一种方法了,大家看看我这种方法写的如何,但是取不到翻译内容// <summary>
            /// 翻译
            /// </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;
            }
      

  8.   

    google限制了上传字符长度,需在5000字符以内
      

  9.   

    参考这里:http://blog.csdn.net/a497785609/article/details/6666994
      

  10.   

    可以 用 post 请求