2010-11-16 4 views
4

Согласно MSDN vb.net uses this extended character set. В моем опыте это на самом деле использует это:набор символов vb.net

alt text

  1. Что мне не хватает? Почему он говорит, что он использует один и использует другой?
  2. Я делаю что-то неправильно?
  3. Есть ли какой-нибудь инструмент преобразования в исходный набор символов?

ответ

6

Такое поведение определяется в документации Chr command:

Возвращаемое значение зависит от кодовой страницы для текущего потока, который содержится в свойстве ANSICodePage класса TextInfo в System.Globalization Пространство имен. Вы можете получить ANSICodePage, указав System.Globalization.CultureInfo.CurrentCulture.TextInfo.ANSICodePage.

Таким образом, выход Chr для значений, больших 127, зависит от системы. Если вы хотите воспроизвести результаты, создайте нужный экземпляр Encoding, позвонив Encoding.GetEncoding(String), а затем используйте Encoding.GetChars(Byte()), чтобы преобразовать ваши числовые значения в символы.

Если вы go up one level в графике связаны в вашем вопросе, вы увидите, что они не утверждают, что эта диаграмма всегда вывод команды Chr:

Символы, которые появляются в Windows, выше 127 зависит на выбранном шрифте.

В диаграммах в этом разделе показан набор символов по умолчанию для консольного приложения.

Ваше приложение представляет собой приложение WinForm, а не консольное приложение. Даже в консоли используемый набор символов может быть изменен (например, с помощью команды chcp), отсюда и слово «по умолчанию».

Для получения подробной информации о кодировках, используемых в .net, я рекомендую следующую статью MSDN: Character Encoding in the .NET Framework.

1

Как вы все это пишете? Потому что обычно, когда вы используете функцию выходного потока, вы можете указать кодировку, идущую с ней.

Edit: Я знаю, что это не C#, но вы можете увидеть идею ...

Вы должны были бы установить кодировку вашего FileStream, делая что-то вроде этого: Setting the encoding when creating the filestream

+0

Я использовал запись (chr (Number)) в консоли. Textbox.text = chr (Число) для изображения, которое вы видите. –

2

Первый набор символов - код Страница 437 (CP437), второй - код Page 1252 (CP1252), также известный как Windows Latin-1.

Я бы предположил, что VB.Net просто подбирает кодировку по умолчанию для ПК.

+1

Догадка правильная, Chr() и Asc() используют страницу системного кода по умолчанию, обычно 1252 в Западной Европе и Америке.Используйте ChrW() и AscW() для работы с Unicode. 437 - это старая кодовая страница IBM PC, которая по умолчанию используется для приложения в режиме консоли. –

Смежные вопросы