【发布时间】:2012-10-29 22:46:39
【问题描述】:
我正在 Unity 中开发一个使用 Assembly C# 的项目。我尝试获取特殊字符,例如é,但在控制台中它只显示一个空白字符:“”。例如翻译“你好吗?”应该返回“Cómo Estás?”,但它返回“Cmo Ests”。我将返回字符串“Cmo Ests”放在一个字符数组中,并意识到它是一个非空空白字符。我正在使用 Encoding.UTF8,当我这样做时:
char ch = '\u00e9';
print (ch);
它将打印“é”。我尝试使用以下方法从给定字符串中获取字节:
byte[] utf8bytes = System.Text.Encoding.UTF8.GetBytes(temp);
在翻译“你好吗?”时,它会返回一个字节串,但是对于é等特殊字符,我得到的是字节序列239、191、189,这是一个替换字符。
我需要从字符中检索什么类型的信息才能准确确定它是什么字符?我是否需要对 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 char[] charString;
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);
string temp = doc.DocumentNode.SelectSingleNode("//span[@title='"+input+"']").InnerText;
charString = temp.ToCharArray();
return temp;
}
// 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;
}
}
【问题讨论】:
-
您应该包含生成响应的代码。
-
老实说,我不明白问题出在哪里。我在你的问题中看到的是你得到的正是你想要的。如果您要求 UTF8 字节,您将获得 UTF8 字节。 239、191、189 是单个 Unicode 字符的 UTF8 编码。如果您需要从 utf8 转换为 unicode,请执行以下操作:stackoverflow.com/questions/11293994/…
-
你的
print()方法是做什么的?如果您尝试将 UTF8 字节视为字符,则会遇到问题。 UTF8 字符长度可以超过 1 个字节。 -
@plinth 问题是,239 191 189 是通用的缺失字符代码,因此 é 和 ó 将具有相同的代码。我需要知道如何区分这两者。
-
@Neil print() 与 Console.Writeln() 或 System.out.println() 相同
标签: c# utf-8 unity3d .net-assembly google-translate