Как конфертировать из unicode в ASCII - PullRequest
5 голосов
/ 17 марта 2010

Есть ли способ конвертировать значения Unicode в ASCII?

Ответы [ 5 ]

11 голосов
/ 10 апреля 2013

Чтобы просто убрать акценты из символов Юникода, вы можете использовать что-то вроде:

string.Concat(input.Normalize(NormalizationForm.FormD).Where(
  c => CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark));
3 голосов
/ 11 июня 2015

Этот обходной путь может лучше удовлетворить ваши потребности. Он удаляет символы Unicode из строки и сохраняет только символы ASCII.

byte[] bytes = Encoding.ASCII.GetBytes("eéêëèiïaâäàåcç  test");
char[] chars = Encoding.ASCII.GetChars(bytes);
string line = new String(chars);
line = line.Replace("?", "");
//Results in "eiac test"

Обратите внимание, что вторым пробелом в строке ввода символов является символ со значением ASCII 255

2 голосов
/ 17 марта 2010

Технически, да, вы можете использовать Encoding.ASCII.

Пример (от байта [] к ASCII):

// Convert Unicode to Bytes

byte[] uni = Encoding.Unicode.GetBytes("Whatever unicode string you have");

// Convert to ASCII

string Ascii = Encoding.ASCII.GetString(uni);

Просто запомните, что Юникод - намного больший стандарт, чем Ascii, и будут символы, которые просто нельзя будет правильно закодировать. Посмотрите здесь для таблиц и немного больше информации о двух кодировках.

1 голос
/ 17 марта 2010

Вы НЕ МОЖЕТЕ конвертировать из Unicode в ASCII. Почти все символы в Юникоде не могут быть выражены в ASCII, а те, которые могут быть , могут иметь точно такие же кодовые точки в ASCII, что и в UTF-8, что, вероятно, и есть. Почти единственное, что вы можете сделать, что даже близко к правильному, - это отбросить все символы выше кодовой точки 128, и даже это, скорее всего, далеко не соответствует вашим требованиям. (Другая возможность состоит в том, чтобы упростить акцентированные или умаленные буквы, чтобы сделать более чем 128 символов «почти» выразимыми, но это все еще даже не начинает фактически охватывать Unicode.)

1 голос
/ 17 марта 2010

Что ж, учитывая, что есть более 100 000 символов Unicode и только 128 символов ASCII, отображение 1-1, очевидно, невозможно.

Вы можете использовать объект Encoding.ASCII для получения байтовых значений ASCII из строки Unicode.

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