Почему консоль не печатает ожидаемые символы?C#

Место общения программистов C#
Ответить
Anonymous
 Почему консоль не печатает ожидаемые символы?

Сообщение Anonymous »

В настоящее время я пытаюсь узнать о различных типах кодирования. Я попытался создать простое консольное приложение, которое бы объясняло разницу между типами.

Код: Выделить всё

byte[] byteArray = new byte[] { 125, 126, 127, 128, 129, 130, 250, 254, 255 };
string s = Encoding.Default.GetString(byteArray);
Console.OutputEncoding = Encoding.Default;
Console.WriteLine("Default: " + s);

s = Encoding.ASCII.GetString(byteArray);
Console.OutputEncoding = Encoding.ASCII;
Console.WriteLine("ASCII: " + s);

s = Encoding.UTF8.GetString(byteArray);
Console.OutputEncoding = Encoding.UTF8;
Console.WriteLine("UTF8: " + s);
Однако результат не такой, как я ожидал.

Код: Выделить всё

Default: }~€‚úûüýþÿ
ASCII: }~?????????
UTF8: }~���������
Хм... символы тоже плохо копируются из вывода консоли сюда, поэтому вот экран печати.

Изображение


Чего я ожидаю это увидеть расширенные символы ASCII. Кодировка по умолчанию почти правильная, но она не может отображать 251, 252 и 253, но это может быть недостатком Console.writeLine(), хотя я этого не ожидал.

Изображение


представление переменной при отладке такое: следует:

Код: Выделить всё

Default encoded string = "}~€‚úûüýþÿ"
ASCII encoded string = "}~?????????"
UTF8 encoded string = "}~���������"
Может кто-нибудь сказать мне, что я делаю неправильно? Я ожидаю, что один из типов кодировки правильно отобразит расширенную таблицу ASCII, но, видимо, ни один из них не может...

Немного контекста:

Я пытаюсь определить, какая кодировка будет лучшим стандартом в нашей компании. Лично я думаю, что UTF8 подойдет, но мой руководитель хотел бы увидеть несколько примеров, прежде чем мы примем решение.
Очевидно, мы знаем, что время от времени нам придется использовать другие типы кодирования (например, при последовательной связи используется 7 бит, поэтому мы не можем использовать там UTF8), но в целом мы хотели бы придерживаться одного типа кодировки. В настоящее время мы используем случайные значения по умолчанию, ASCII и UTF8, так что это нехорошо.

РЕДАКТИРОВАТЬ

вывод в соответствии с:

Код: Выделить всё

Console.WriteLine("Default: {0} for {1}", s, Console.OutputEncoding.CodePage);
Изображение


Редактировать 2:

Поскольку я думал, что не существует кодировки, в которой расширенные символы ascii соответствуют десятичным числам в таблице Я дал ссылку, я перевернул его, и это:

Код: Выделить всё

char specialChar = '√';
int charNumber = (int)specialChar;
дает мне число: 8730, что в таблице равно 251

Подробнее здесь: https://stackoverflow.com/questions/334 ... -expecting
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»