我目前正在制作一个西班牙语翻译程序,该程序使用HtmlDocument访问Google翻译网站。我在Unity中用Assembly C#编程。下面显示的是我目前访问Google的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UnityEngine;
using System.Collections;
using System.Net;
using HtmlAgilityPack;
public class Dictionary{
string[] formatParams;
HtmlDocument doc;
string returnString;
char[] letters;
public Dictionary(){
formatParams = new string[2];
doc = new HtmlDocument();
returnString = "";
}
public string Translate(String input, String languagePair, Encoding encoding)
{
formatParams[0]= input;
formatParams[1]= languagePair;
string url = String.Format("http://www.google.com/translate_t?hl=en&ie=UTF8&text={0}&langpair={1}", formatParams);
string result = String.Empty;
using (WebClient webClient = new WebClient())
{
webClient.Encoding = encoding;
result = webClient.DownloadString(url);
}
doc.LoadHtml(result);
input = alter (input);
return doc.DocumentNode.SelectSingleNode("//span[@title='"+input+"']").InnerText;
}
// Use this for initialization
void Start () {
}
string alter(string inputString){
returnString = "";
letters = inputString.ToCharArray();
for(int i=0; i<inputString.Length;i++){
if(letters[i]=='\''){
returnString = returnString + "'";
}else{
returnString = returnString + letters[i];
}
}
return returnString;
}
}
代码可通过以下方式访问:
search = new Dictionary();
input = " ";
temp = " ";
returnString = "";
code = Encoding.UTF8;
search.Translate(input,"en|es",code);
此代码确实成功,如果您输入“Hello”作为输入,它将返回“Hola”。但是,如果将输入设置为“你好吗?”它将返回“Cmo ests”。我做过研究,发现使用UTF8不会显示我需要的西班牙语(和其他语言)的特殊字符。我已经读过,使用UTF16将修复此错误,但是,当我写道:
code = Encoding.UTF16;
弹出另一个错误说:
Assets/GUIScript.cs(26,33): error CS0117: `System.Text.Encoding' does not contain a definition for `UTF16'
如果有人知道正确实施UTF16的代码或用特殊字符修复我的问题,我们将非常感谢任何帮助。
答案 0 :(得分:1)
首先,您不需要UTF16。西班牙语字符(实际上是任何Unicode字符)可以用UTF8表示。但要回答您的直接问题,您应该将System.Text.UnicodeEncoding
用于UTF16(link)。
你遇到的问题是在其他地方。
答案 1 :(得分:0)
正如您在下图中看到的那样,我确实检查了翻译器和编码。似乎UTF-8是你应该使用的唯一东西,因为我确信它。你可以看到翻译器响应的编码也是UTF-8。它是世界上使用自然语言最完整的编码。
干杯