这是在我开发幼儿英语学习软件”趣听说“时遇到的问题,需要英汉互译,Unity3d引擎,VS2017平台,查询了很多资料,结合网上的接口教程,实现了3种方法,但也有缺陷,如果有更好的办法,欢迎交流,代码 如下:
using LitJson;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Net;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using UnityEngine;
[System.Serializable]
public class GetResult
{
public string from;
public string to;
public List<finalresult> trans_result;
}
[System.Serializable]
public class finalresult
{
public string src;
public string dst;
}
public class testt : MonoBehaviour
{
void Start()
{
string c = BaiduFanYi("today is sunday!");
Debug.Log(c);
}
public string BaiduFanYi(string Input)// 英文转中文
{
string q = Input;
string appId = "20180305000131214"; //密钥需简单注册获取。
string password = "vNKjuXFap0dMBtadDjAo";
//源语言
string from = "en";
//目标语言
string to = "zh";
//获得随机数
string randomnum = System.DateTime.Now.Millisecond.ToString();
//获得需要加密的字符串
string index = appId + q + randomnum + password;
//进行加密
string MD5Sign = GetMD5(index);
//创建连接地址
string url = string.Format("http://api.fanyi.baidu.com/api/trans/vip/translate?q={0}&from={1}&to={2}&appid={3}&salt={4}&sign={5}",q, from, to, appId, randomnum, MD5Sign );
WebClient wc = new WebClient();
string FanYi = wc.DownloadString(url);
Debug.Log(FanYi);
//JsonData date = JsonMapper.ToObject(FanYi); //方法1,引入 LitJson.dll即可;
//return date["trans_result"][0]["dst"].ToString();
//GetResult result = new GetResult(); //方法2
//JsonUtility.FromJsonOverwrite(FanYi, result);
//return result.trans_result[0].dst;
GetResult result = JsonUtility.FromJson<GetResult>(FanYi); //方法3
return result.trans_result[0].dst;
}
public string GetMD5(string input)// MD5加密
{
if (input == null)
{ return null;}
//创建MD5哈希表的默认实例
MD5 md = MD5.Create();
//将要加密的字符串转换为字节数组
byte[] buffer = Encoding.UTF8.GetBytes(input);
//计算指定的字节数组的哈希值
byte[] data = md.ComputeHash(buffer);
StringBuilder sb = new StringBuilder();
//寻黄将哈需数据的每一个字节格式化为16进制字符串
for (int i = 0; i < data.Length; i++)
{
sb.Append(data[i].ToString("x2"));
}
//返回16进制字符串
return sb.ToString();
}
}