Как удалить (?) При преобразовании нашего байтового содержимого из юникода в символ ANSI - PullRequest
0 голосов
/ 26 декабря 2008

Мне нужно преобразовать символы Юникода в символы ANSI

byte[] encode = Encoding.Convert(Encoding.Unicode, Encoding.Default, report);

Я использую этот кусок кода. Пока я это просматриваю, я нашла это лишнее? персонаж добавлен в первой части

? FF EE 20 12

Ответы [ 2 ]

2 голосов
/ 26 декабря 2008

Было бы полезно, если бы вы разместили как входную строку, так и вывод.

Encoding.Convert () выведет '?' когда он пытается преобразовать символ в источнике, который не имеет соответствующего символа в целевой кодировке.

Последовательность в начале вашего вывода выглядит подозрительно близко к метке порядка байтов (BOM). На кодовых страницах ANSI их нет, поэтому, если в начале потока Unicode есть спецификация, вы можете попытаться удалить ее перед передачей данных в конвертер.

1 голос
/ 15 марта 2009

В данном конкретном случае, похоже, что ваши входные данные содержат вещи, которых там быть не должно (см. ответ Михаила ).

В общем случае при преобразовании между кодировками вы можете реализовать свой собственный механизм отката кодирования, используя EncoderReplacementFallback класс . Вы можете легко сделать его пустым для неподдерживаемых символов. Просто укажите Encoding, который использует ваш запасной вариант при конвертации.

...