Преобразование из UTF8 в ASCII - PullRequest
12 голосов
/ 04 декабря 2010

У меня есть текст, прочитанный из файла XML, хранящегося в кодировке UTF8. C # читает это отлично, я проверил с помощью отладчика, но когда я пытаюсь преобразовать его в ASCII, чтобы сохранить его в другом файле, я получаю? char в местах, где был противоречивый характер. Например, этот текст:

string s = "La introducción masiva de las nuevas tecnologías de la información";

Будет сохранено как

"La introducci?n masiva de las nuevas tecnolog?as de la informaci?n"

Я не могу просто заменить их на их латинские (a, e, i, o, u) гласные, потому что некоторые слова на испанском языке будут пропускать смысл. Я уже попробовал это и это вопросов без успеха. Поэтому я надеюсь, что кто-нибудь может мне помочь. Выбранный ответ во втором даже не скомпилирован ...!

На случай, если кто-то захочет взглянуть, мой код такой:

private void WriteInput( string input )
{
   byte[] byteArray = Encoding.UTF8.GetBytes(input);
   byte[] asciiArray = Encoding.Convert(Encoding.UTF8, Encoding.ASCII, byteArray);
   string finalString = Encoding.ASCII.GetString(asciiArray);

   string inputFile = _idFile + ".in";
   var batchWriter = new StreamWriter(inputFile, false, Encoding.ASCII);
   batchWriter.Write(finalString);
   batchWriter.Close();
}

Ответы [ 2 ]

31 голосов
/ 04 декабря 2010

Эти символы не имеют сопоставления в ASCII.Чтобы убедиться в этом, просмотрите таблицу ASCII, например Википедия .Возможно, вас заинтересует кодировка Windows 1252 или «расширенный ASCII», как его иногда называют, с кодовыми точками для многих акцентированных символов, включая испанский.

var input = "La introducción masiva de las nuevas tecnologías de la información";
var utf8bytes = Encoding.UTF8.GetBytes(input);
var win1252Bytes = Encoding.Convert(
                Encoding.UTF8, Encoding.GetEncoding("windows-1252"), utf8bytes);
File.WriteAllBytes(@"foo.txt", win1252Bytes);
7 голосов
/ 04 декабря 2010

Не может быть сделано.В ASCII нет этих букв, поэтому лучшее, что вы можете сделать, - это кодировать их по URL или кодировать по Юникоду-escape.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...