Pracuję nad projektem w Unity, który używa Assembly C#. Próbuję uzyskać specjalną postać, taką jak é, ale w konsoli po prostu wyświetla się pusta postać: "". Na przykład tłumaczenie "Jak się masz?" Powinien zwrócić "Cómo Estás?", Ale zwraca "Cmo Ests". Wstawiłem ciąg zwrotny "Cmo Ests" w tablicy znaków i zdałem sobie sprawę, że jest to pusta, nie pusta litera. Używam Encoding.UTF8, a kiedy zrobić:Jak uzyskać dane wyłączone z postaci
char ch = '\u00e9';
print (ch);
będzie drukować „E”. Próbowałem się bajty od danego łańcucha przy użyciu: „Jak się masz”
byte[] utf8bytes = System.Text.Encoding.UTF8.GetBytes(temp);
Podczas tłumaczenia, zwróci ciąg bajtów, ale dla znaków specjalnych, takich jak e, pojawia się szereg bajty 239, 191, 189, które są znakami zastępującymi.
Jakiego rodzaju informacji potrzebuję odzyskać od bohaterów, aby dokładnie określić, jaki to jest znak? Czy muszę coś zrobić z informacjami, które daje mi Google, czy jest to coś innego? Potrzebuję ogólnego przypadku, który mogę umieścić w moim programie i będzie pracował dla dowolnego ciągu wejściowego. Jeśli ktokolwiek może pomóc, byłoby to bardzo cenne.
Oto kod, który jest wymieniony:
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;
}
}
Powinieneś dołączyć kod, który generuje odpowiedź. –
Nie widzę problemu, szczerze. W twoim pytaniu widzę, że dostajesz dokładnie to, o co prosisz. Jeśli poprosisz o bajty w formacie UTF8, otrzymasz bajty w formacie UTF8. 239, 191, 189 to kodowanie UTF8 dla twojej pojedynczej postaci Unicode. Jeśli chcesz przetłumaczyć z utf8 na unicode, zrób to: http://stackoverflow.com/questions/11293994/how-to-convert-a-utf-8-tring-into-unicode – plinth
Co robi twój 'print() 'Metoda robi? Jeśli próbujesz traktować bajty UTF8 jako znaki, będziesz mieć problemy. Znaki UTF8 mogą mieć więcej niż 1 bajt długości. –