以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]百度AI通用翻译  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=146229)

--  作者:天一生水
--  发布时间:2020/2/19 15:56:00
--  [求助]百度AI通用翻译

蓝老师好!能不能把百度通用翻译模块加入到您置顶的示例里?

百度AI:http://fanyi-api.baidu.com/api/trans/product/apidoc#joinFile

下载的c#demo,用vs2008打开后的代码如下:

 

using System;
using System.Text;
using System.Net;
using System.IO;
using System.Security.Cryptography;
using System.Web;

namespace TransAPICSharpDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // 原文
            string q = "apple";
            // 源语言
            string from = "en";
            // 目标语言
            string to = "zh";
            // 改成您的APP ID
            string appId = "2015063000000001";
            Random rd = new Random();
            string salt = rd.Next(100000).ToString();
            // 改成您的密钥
            string secretKey = "12345678";
            string sign = EncryptString(appId + q + salt + secretKey);
            string url = "http://api.fanyi.baidu.com/api/trans/vip/translate?";
            url += "q=" + HttpUtility.UrlEncode(q);
            url += "&from=" + from;
            url += "&to=" + to;
            url += "&appid=" + appId;
            url += "&salt=" + salt;
            url += "&sign=" + sign;
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "GET";
            request.C;
            request.UserAgent = null;
            request.Timeout = 6000;
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream myResponseStream = response.GetResponseStream();
            StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
            string retString = myStreamReader.ReadToEnd();
            myStreamReader.Close();
            myResponseStream.Close();
            Console.WriteLine(retString);
            Console.ReadLine();
        }
        // 计算MD5值
        public static string EncryptString(string str)
        {
            MD5 md5 = MD5.Create();
            // 将字符串转换成字节数组
            byte[] byteOld = Encoding.UTF8.GetBytes(str);
            // 调用加密方法
            byte[] byteNew = md5.ComputeHash(byteOld);
            // 将加密结果转换为字符串
            StringBuilder sb = new StringBuilder();
            foreach (byte b in byteNew)
            {
                // 将字节转换成16进制表示的字符串,
                sb.Append(b.ToString("x2"));
            }
            // 返回加密的字符串
            return sb.ToString();
        }
    }

 


--  作者:有点蓝
--  发布时间:2020/2/19 16:25:00
--  
全局代码

Public Function EncryptString(ByVal str As String) As String
    Dim md5 = System.Security.Cryptography.MD5.Create()
    Dim byteOld As Byte() = Encoding.UTF8.GetBytes(str)
    Dim byteNew As Byte() = md5.ComputeHash(byteOld)
    Dim sb As  New StringBuilder()

    For Each b As Byte In byteNew
        sb.Append(b.ToString("x2"))
    Next

    Return sb.ToString()
End Function

调用

Dim q As String = "apple"
Dim from As String = "en"
Dim [To] As String = "zh"
Dim appId As String = "2015063000000001"
Dim rd As Random = New Random()
Dim salt As String = Rand.Next(100000).ToString()
Dim secretKey As String = "12345678"
Dim sign As String = EncryptString(appId & q & salt & secretKey)
Dim url As String = "http://api.fanyi.baidu.com/api/trans/vip/translate"
Dim hc As New HttpClient(url )
hc.ContentType = "application/x-www-form-urlencoded"
hc.FormData.Add("q",UrlEncode(q))
hc.FormData.Add("from",from)
hc.FormData.Add("to",[To])
hc.FormData.Add("appid",appid)
hc.FormData.Add("salt",salt)
hc.FormData.Add("sign",sign)
hc.Timeout = 6000
Dim ret As String = hc.GetData
msgbox(ret)

--  作者:天一生水
--  发布时间:2020/2/19 20:39:00
--  
谢谢蓝老师!
比如msgbox(ret)显示为:    {"from":"en","to":"zh","trans_result":[{"src":"Apple","dst":"\\u82f9\\u679c"}]}
我想先获取字符串中的"\\u82f9\\u679c",然后再转换为中文字符,为什么第1步就报错?

......

\'1、获取译文的unicode编码
Dim jo As JObject = JObject.Parse(ret)
Dim str as string = jo("trans_result")("dst")      ’报错

\'2、转换unicode编码为中文字符
Dim mc = System.Text.RegularExpressions.Regex.Matches(str, "\\\\u.{4}|.+?")
Dim c As String = ""
For i As Integer = 0 To mc.count - 1
    Dim v As String = mc(i).Value
    If v.StartsWith("\\u") Then
        c &= chrw(Convert.ToInt32(v.substring(2), 16))
    Else
        c &= v
    End If
Next

msgbox(c)

--  作者:有点蓝
--  发布时间:2020/2/20 9:23:00
--  
不需要转换的,直接读出来即可

……
Dim jo As JObject = JObject.Parse(ret)
Dim str As String = jo("trans_result")(0)("dst") 
msgbox(str)

--  作者:jimmyhwang
--  发布时间:2020/4/6 1:00:00
--  [求助]百度翻译求小例,英语到其他小语种。
亲,你这个能回复个小例给我吗?我也学学怎么做。Tq
--  作者:有点蓝
--  发布时间:2020/4/6 10:08:00
--  
以下是引用jimmyhwang在2020/4/6 1:00:00的发言:
亲,你这个能回复个小例给我吗?我也学学怎么做。Tq

参考:http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&Id=139788,大同小异