Строковая кодировка C # по умолчанию - PullRequest
9 голосов
/ 01 июля 2011

У меня проблемы с кодировкой строки по умолчанию в C #.Мне нужно прочитать строки из определенных файлов / пакетов.Однако в эти строки входят символы из диапазона 128-256 (расширенный ascii), и все эти символы отображаются в виде вопросительных знаков вместо правильных символов.Например, при чтении строки она может выглядеть как «S? MeStr? N?»если строка содержала расширенные символы ascii.

Теперь, есть ли способ изменить кодировку по умолчанию для моего приложения?Я знаю, что в Java вы можете определить набор символов по умолчанию из командной строки.

Ответы [ 2 ]

23 голосов
/ 01 июля 2011

Нет единой расширенной кодировки ASCII.Существует множество различных 8-битных кодировок, которые совместимы с ASCII для нижних 128 значений.

Вам необходимо выяснить, какую кодировку используют ваши файлы на самом деле , и конкретно, что при чтенииданные с StreamReader (или что-то еще, что вы используете).Например, вы можете захотеть кодировать Windows-1252 :

Encoding encoding = Encoding.GetEncoding(1252);

.NET-строки всегда последовательности кодовых точек UTF-16.Вы не можете изменить это, и вы не должны пытаться.(Это верно и для Java, и вы действительно не должны использовать кодировку платформы по умолчанию при вызове getBytes() и т. Д., Если это не то, что вы действительно, действительно имеете в виду.)

2 голосов
/ 01 июля 2011

Кодировка может быть указана как минимум в одной перегрузке функций для чтения текста - например, ReadAllText (string, Encoding) .

Итак, если у вас нет файла, закодированного с помощью Windows-1252, вы можете указать его следующим образом:

string contents = File.ReadAllText(someFilePath, Encoding.GetEncoding(1252));

Конечно, для этого необходимо заранее знать, какая кодовая страница используетсяиспользуемый.

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