Что такое формат ANSI?

Что такое формат кодирования ANSI? Это системный формат по умолчанию? Чем он отличается от ASCII?

10 ответов

Решение

Кодировка ANSI - это слегка общий термин, используемый для обозначения стандартной кодовой страницы в системе, обычно в Windows. В западных / американских системах его более правильно называть Windows-1252. (Он может представлять некоторые другие кодовые страницы Windows в других системах.) По сути, это расширение набора символов ASCII в том смысле, что он включает все символы ASCII с дополнительными 128-значными кодами. Это различие связано с тем, что кодирование "ANSI" является 8-разрядным, а не 7-разрядным, как ASCII (в настоящее время ASCII почти всегда кодируется как 8-разрядные байты с MSB, установленным в 0). См. Статью для объяснения того, почему эту кодировку обычно называют ANSI.

Название "ANSI" является неправильным, так как оно не соответствует ни одному из действующих стандартов ANSI, но название застряло. ANSI - это не то же самое, что UTF-8.

Технически, ANSI должен быть таким же, как US-ASCII. Он относится к стандарту ANSI X3.4, который является просто утвержденной версией ANSI организации ASCII. Использование символов верхнего набора битов не определено в ASCII/ANSI, так как это 7-битный набор символов.

Однако годы злоупотребления этим термином со стороны DOS и впоследствии сообщества Windows оставили его практическое значение как "системная кодовая страница любой машины, которая используется". Системная кодовая страница также иногда называется "mbcs", поскольку в восточноазиатских системах это может быть кодирование в несколько байтов на символ. Некоторые кодовые страницы могут даже использовать верхне-битовые чистые байты в качестве завершающих байтов в многобайтовой последовательности, поэтому он даже не является строго совместимым с простым ASCII... но даже тогда он по-прежнему называется "ANSI".

При настройках по умолчанию в США и Западной Европе "ANSI" отображается на кодовую страницу Windows 1252. Это не то же самое, что ISO-8859-1 (хотя это очень похоже). На других машинах это может быть что-то еще вообще. Это делает "ANSI" совершенно бесполезным в качестве внешнего идентификатора кодировки.

Строго говоря, нет такой вещи, как кодирование ANSI. В разговорной речи термин ANSI используется для нескольких различных кодировок:

  1. ISO 8859-1
  2. Windows CP1252
  3. Текущее кодирование системы на компьютере с Windows (в терминологии Win32 API).

Когда-то Microsoft, как и все остальные, использовала 7-битные наборы символов, и они изобрели свои собственные, когда им это было удобно, хотя они сохранили ASCII в качестве основного подмножества. Затем они поняли, что мир перешел на 8-битное кодирование и что существуют международные стандарты, такие как семейство ISO-8859. В те дни, если вы хотели получить международный стандарт и жили в США, вы купили его в Американском национальном институте стандартов, ANSI, который переиздал международные стандарты со своим собственным брендом и цифрами (это потому, что правительство США хочет соответствие американским стандартам, а не международным стандартам). Таким образом, копия ISO-8859 от Microsoft гласила "ANSI" на обложке. И поскольку Microsoft в то время не очень-то привыкла к стандартам, они не осознавали, что ANSI также опубликовала множество других стандартов. Таким образом, они сослались на стандарты в семействе ISO-8859 (и варианты, которые они изобрели, потому что они не понимали стандарты в те дни) под названием на обложке "ANSI", и оно попало в Microsoft пользовательская документация и, следовательно, в пользовательском сообществе. Это было около 30 лет назад, но вы все еще иногда слышите это имя сегодня.

ASCII просто определяет 7-битную кодовую страницу с 128 символами. ANSI расширяет это до 8 бит, и есть несколько разных кодовых страниц для символов от 128 до 255.

Именование ANSI не является правильным, потому что на самом деле это норма ISO/IEC 8859, которая определяет эти кодовые страницы. См. ISO/IEC 8859 для справки. Имеется 16 кодовых страниц от ИСО / МЭК 8859-1 до ИСО / МЭК 8859-16.

Windows-1252 снова основана на ISO/IEC 8859-1 с некоторыми изменениями, в основном в диапазоне набора управления C1 в диапазоне от 128 до 159. Википедия утверждает, что Windows-1252 также называется ISO-8859-1 со вторым дефис между ISO и 8859. (Невероятно! Кто делает что-то подобное?!?)

В основном "ANSI" относится к устаревшей кодовой странице в Windows. Смотрите также статью Раймонда Чена на эту тему. Первые 127 символов идентичны ASCII в большинстве кодовых страниц, но верхние символы различаются.

Тем не менее, ANSI не означает автоматически CP1252 или латиницу 1.

Несмотря на всю путаницу, вы должны просто избегать подобных проблем в настоящее время и использовать Unicode.

Если ваш компьютер не является "западным" и вы не знаете, какая кодовая страница используется, вы можете взглянуть на эту страницу: Справочник по API поддержки национальных языков (NLS)

[Microsoft удалила эту ссылку, возьмите ее из веб-архива Справочник по поддержке национальных языков (NLS)

Или вы можете запросить ваш реестр:

C:\>reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage /f ACP

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage
    ACP    REG_SZ    1252

End of search: 1 match(es) found.

C:\>

Я помню, когда текст "ANSI" ссылался на псевдо-управляющие коды VT-100, используемые в DOS через драйвер ANSI.SYS для изменения потока потокового текста.... Вероятно, это не то, на что вы ссылаетесь, но если это видно по http://en.wikipedia.org/wiki/ANSI_escape_code

При использовании однобайтовых символов формат ASCII определяет первые 127 символов. Расширенные символы от 128 до 255 определяются различными кодовыми страницами ANSI, чтобы обеспечить ограниченную поддержку других языков. Чтобы понять смысл строки в кодировке ANSI, вам необходимо знать, какую кодовую страницу она использует.

ANSI (он же Windows-1252/WinLatin1) - это кодировка символов латинского алфавита, довольно похожая на ISO-8859-1. Вы можете взглянуть на это в Википедии.

Другие вопросы по тегам