Связь между .NET Encoding и Characterset
-
06-07-2019 - |
Вопрос
Какая связь между CharacterSet здесь:
http://msdn.microsoft.com/en-us /library/ms709353(VS.85).aspx
и ASCII кодирования здесь:
http://msdn.microsoft .com / EN-US / библиотека / system.text.asciiencoding.getbytes (VS.71) .aspx
Решение
ANSI - это текущая кодовая страница Windows ANSI, эквивалентная Encoding.Default.
OEM - это текущая кодовая страница OEM, обычно используемая консольными приложениями.
Вы можете получить это, используя:
Encoding.GetEncoding(CultureInfo.CurrentCulture.TextInfo.OEMCodePage)
В консольном приложении OEM-кодировка также будет доступна с помощью
Console.OutputEncoding
Другие советы
Это действительно очень древнее. ODBC восходит к каменному веку, когда Windows начала переходить от MS-DOS. Тогда много текста все еще было закодировано в исходном наборе символов IBM-PC, названном «Набор символов OEM». Microsoft. Стандартный набор IBM-PC имел несколько акцентированных символов и псевдографических символов в верхней половине, коды 0x80-0xff.
Слишком ограниченный для вывода текста на неанглийских языках, Microsoft начала использовать кодовые страницы, диапазоны глифов символов, подходящих для определенной языковой группы. Набор символов американского английского был стандартизирован ANSI, и теперь эта метка (неправильно) прикреплена к любой кодовой странице не OEM.
Никто больше не кодирует текст в наборе символов OEM, он прошел путь додо по крайней мере 10 лет назад. Правильная настройка здесь - ANSI. И скрестив пальцы за спиной, кодовая страница, используемая для кодирования текста, соответствует кодовой странице вашей системы по умолчанию. Это тоже додо, Юникод решил это.
Короткий ответ на ваш вопрос, прямой связи нет.
Более длинная версия:
CharacterSet
для " Schema.ini " файл может быть ANSI
или OEM
.
ANSI и ASCII относятся к разным вещам.
Вы можете прочитать об этом здесь:
Понимание символов ASCII и ANSI
Кодировка ASCII и ANSI Алекса Хоффмана
Насколько я понимаю, CharacterSet = ANSI эквивалентен Encoding.Default . OEM может быть ASCIIEncoding тогда.
Однако ANSI использует системную кодовую страницу ANSI, поэтому несовместимости могут возникнуть, если к одному и тому же файлу обращаются с компьютеров с разными кодовыми страницами.
Я собрал собственную ссылку для переключения между ними:
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