Что такое формат ANSI? - PullRequest
       69

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

185 голосов
/ 31 марта 2009

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

Ответы [ 10 ]

211 голосов
/ 31 марта 2009

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

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

52 голосов
/ 31 марта 2009

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

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

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

28 голосов
/ 31 марта 2009

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

  1. ISO 8859-1
  2. Windows CP1252
  3. Текущая системная кодировка на машине Windows (в терминологии Win32 API).
14 голосов
/ 22 сентября 2014

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

12 голосов
/ 31 марта 2009

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

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

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

3 голосов
/ 31 марта 2009

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

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

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

2 голосов
/ 25 марта 2015

В случае, если ваш ПК не является «западным» ПК и вы не знаете, какая кодовая страница используется, вы можете взглянуть на эту страницу: Справочник по 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:\>
1 голос
/ 31 марта 2009

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

1 голос
/ 31 марта 2009

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

0 голосов
/ 31 марта 2009

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

...