虽然百度翻译相对于谷歌翻译在准确性方面还有很大的提升空间,但网络的现实情况及百度翻译接口的免费易用性方面让我们选择百度翻译接口。
百度翻译API接入文档请参考: http://api.fanyi.baidu.com/api/trans/product/apidoc
文档中已经非常详细了,几个要点:
1、用MD5生成签名的时候需要用UTF8编码
2、对需要翻译的文本要进行url编码,UrlEncode的时候需要采用UTF8编码,生成签名时的翻译文本不需要url编码。
下面给出代码片段
public string Translate(string q, string from, string to) { // 生成随机数 Random r = new Random(int.MaxValue); string salt = r.Next(1000000, int.MaxValue).ToString(); // 生成签名 string sign = MD5(_appid + q + salt + _key, Encoding.UTF8); // 请求网址 string url = string.Format("http://api.fanyi.baidu.com/api/trans/vip/translate?appid={0}&salt={1}&from={2}&to={3}&sign={4}", _appid, salt, from, to, sign); // 以POST方式发送数据(非WEB项目需要添加引用C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Web.dll) string postData = string.Format("q={0}", System.Web.HttpUtility.UrlEncode(q, Encoding.UTF8)); byte[] bytes = Encoding.UTF8.GetBytes(postData); WebClient client = new WebClient(); client.Encoding = Encoding.UTF8; client.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); client.Headers.Add("ContentLength", postData.Length.ToString()); byte[] responseData = client.UploadData(url, "POST", bytes); // 取得响应结果 string strResult = Encoding.GetEncoding("utf-8").GetString(responseData); string strFanyi = ""; //反序列化结果 BaiduFanyiJson fanyi = JsonConvert.DeserializeObject<BaiduFanyiJson>(strResult); if (fanyi.IsNull) { ErrorResult error = JsonConvert.DeserializeObject<ErrorResult>(strResult); Console.Write(error.ErrorMsg()); } else { foreach (TransResult tr in fanyi.trans_result) { strFanyi += tr.dst; } } return strFanyi; } static void Main(string[] args) { BaiduTranslator trans = new BaiduTranslator("2015063000000001", "12345678"); // 汉译英 Console.WriteLine("翻译结果:" + trans.Translate("欢迎光临好库编程网okbase.net", "zh", "en")); // 英译汉 Console.WriteLine("翻译结果:" + trans.Translate("welcome to visit okbase.net", "en", "zh")); }
详细代码请下载项目源码:http://www.okbase.net/file/item/33980
免责声明:好库网所展示的信息由买卖双方自行提供,其真实性、准确性和合法性由信息发布人负责。好库网不提供任何保证,并不承担任何法律责任。