Связь между .NET Encoding и Characterset - PullRequest

Ответы [ 5 ]

8 голосов
/ 28 ноября 2009

ANSI - это текущая кодовая страница Windows ANSI, эквивалентная Encoding.Default.

OEM - это текущая кодовая страница OEM, обычно используемая консольными приложениями.

Вы можете получить это используя:

Encoding.GetEncoding(CultureInfo.CurrentCulture.TextInfo.OEMCodePage)

В консольном приложении OEM-кодировка также будет доступна с использованием

Console.OutputEncoding
2 голосов
/ 28 ноября 2009

Это действительно очень древний. ODBC восходит к каменному веку, когда Windows начала переходить от MS-DOS. Тогда много текста все еще было закодировано в исходном наборе символов IBM-PC, названном Microsoft «OEM Character Set». Стандартный набор IBM-PC имел несколько акцентированных символов и псевдо графических глифов в верхней половине, коды 0x80-0xff.

Слишком ограничен для вывода текста на неанглийских языках, Microsoft начала использовать кодовые страницы, диапазоны глифов символов, подходящих для определенной языковой группы. Набор символов американского английского был стандартизирован ANSI, и теперь эта метка прикреплена (неправильно) к любой кодовой странице не OEM.

Никто больше не кодирует текст в наборе символов OEM, он прошел путь додо по крайней мере 10 лет назад. Правильная настройка здесь - ANSI. И скрестив пальцы за спиной, кодовая страница, используемая для кодирования текста, соответствует кодовой странице вашей системы по умолчанию. Это тоже додо, Юникод решил это.

1 голос
/ 28 ноября 2009

Насколько я понимаю, CharacterSet = ANSI эквивалентен Encoding.Default . OEM может быть ASCIIEncoding тогда.

Однако ANSI использует системную кодовую страницу ANSI, поэтому несовместимости могут возникнуть, если к одному и тому же файлу обращаются с компьютеров с разными кодовыми страницами.

1 голос
/ 28 ноября 2009

Краткий ответ на ваш вопрос, прямой связи нет.

Более длинная версия:
CharacterSet для файла "Schema.ini" может быть ANSI или OEM.
ANSI и ASCII относятся к разным вещам.

Подробнее об этом можно прочитать здесь:
Понимание символов ASCII и ANSI
ASCII против кодирования ANSI Алекса Хоффмана

0 голосов
/ 12 ноября 2010

Я собрал собственную ссылку для переключения между ними:

Windows code page       Name            System.Text.Encoding    schema.ini CharacterSet
20127                   ASCII (US)      ASCII                   20127
1252                    ANSI Latin I    Default                 ANSI
65001                   UTF-8           UTF8                    65001
1200                    UTF-16 LE       Unicode                 Unicode
1201                    UTF-16 BE       BigEndianUnicode        1201
...