Консоль не отображает маленькую букву s с кароном при преобразовании в ISO 8859-1.

Мое приложение получает целочисленные значения для символов ISO 8859-1 через TCP и должно отображать их для тестирования в консоли. Для преобразования строк Int/Bytes в строки ISO 8859-1 я взял код из принятого ответа этот вопрос:

var e = Encoding.GetEncoding("iso-8859-1");
var s = e.GetString(new byte[] { 189 });

Он отлично работает, например, со значением 189, которое равно ½ в ISO 8859-1. Но в моем тесте я получил байт со значением 154, которое равно š (латинская строчная буква S с кароном) в соответствии с этот сайт.

Проблема в том, что он не отображает его на консоли, а просто отображает знак вопроса, например: введите описание изображения здесь, и отладчик покажет только простую строку:введите описание изображения здесь
< br> В чем может быть ошибка?

Мы будем очень признательны за любую помощь.


person Tearsdontfalls    schedule 16.03.2013    source источник
comment
Я не могу воспроизвести. В LinqPad Encoding.GetEncoding("iso-8859-1").GetString(new byte[] { 189 }) выдает ½.   -  person Oded    schedule 16.03.2013
comment
Это не проблема C# сама по себе, я пересматриваю заголовок.   -  person user7116    schedule 16.03.2013
comment
Действительно ли этот стандарт определяет это значение 154? en.wikipedia.org/wiki/ISO/IEC_8859-1 не выглядеть так;   -  person Meirion Hughes    schedule 16.03.2013


Ответы (1)


Я собираюсь пойти на риск здесь; ISO/IEC 8859-1 не определяет значения между 126 и 159. См. http://en.wikipedia.org/wiki/ISO/IEC_8859-1

это работает;

  var e = Encoding.GetEncoding("Windows-1252");
  var s = e.GetString(new byte[] { 154 });

  Console.OutputEncoding = Encoding.GetEncoding("Windows-1252");

  Console.WriteLine(s);

Я считаю, что Windows-1252 предпочтительнее;

... однако проект спецификации HTML 5 требует, чтобы документы, рекламируемые как ISO-8859-1, фактически анализировались с использованием кодировки Windows-1252.[2])

http://en.wikipedia.org/wiki/ISO/IEC_8859-1

person Meirion Hughes    schedule 16.03.2013
comment
Да, «š» не определено в ISO 8859-1. Он находится в ISO 8859-2 под кодовым номером 185. - person liori; 16.03.2013
comment
Хм, может быть, есть обходной путь? Потому что в C++ std::char отображает š, когда его значение равно 154. - person Tearsdontfalls; 16.03.2013
comment
@Tearsdontfalls: тогда вы используете не ISO 8859-1. Может быть, это какое-то расширение для конкретной платформы? - person liori; 16.03.2013