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

Ответы:

246

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

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

нолдорин
источник
42
ANSI - это не просто «небольшой» неправильный термин, это совершенно неправильное название. Это название ясно подразумевает, что все, к чему оно относится, является стандартом ANSI, которым оно не является; это черно-белое дело факта. С учетом сказанного, он настолько широко используется, что мы застряли с ним.
Nate CK
1
Я знаю, что ANSI - это кодовая страница 437, а не кодовая страница Windows 1252. Назад, когда ANSI ссылалась на графику, созданную для систем досок объявлений, я могу в значительной степени гарантировать, что это так.
Лордскарлет
@lordscarlet: ANSI не стандартизировал их, но Windows-1252 ближе всего (по крайней мере, для Windows), так как является надмножеством. См. En.wikipedia.org/wiki/ANSI_codepage#ANSI для справки.
Нолдорин
4
«ANSI» явно не относится ни к какому стандарту ANSI, однако на самом деле вы можете выбрать «Кодировка: ANSI», например, в «Блокноте» при сохранении файла. И актуальный вопрос: «Что это значит»? Этот ответ, безусловно, самый лучший.
Вернфрид Домшайт
1
В моем случае ANSI имел в виду windows-1254.
Рамазан Полат
59

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

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

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

bobince
источник
32

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

  1. ISO 8859-1
  2. Windows CP1252
  3. Текущее кодирование системы на компьютере Windows (в терминологии Win32 API).
Неманья Трифунович
источник
Это не правильно. Кодовая страница Windows 1252 была создана на основе ISO 8859-1, но не полностью совпадает. Термин ANSI относится к стандарту ISO 8859-x.
Патрик
17

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

Майкл Кей
источник
стандарты были отраслевым материалом, поэтому программисты были новыми для стандартов, поскольку это была новая отрасль?
CoffeDeveloper
1
Ко времени основания Microsoft это не было новой отраслью.
Майкл Кей
Microsoft имеет проблемное и противоречивое отношение к совместимости в целом. Когда в конце 1990-х годов они решили «принять и расширить» стандарты вместо того, чтобы напрямую избегать их, это было замечательным изменением, хотя все еще не было ответственного подхода к надлежащему взаимодействию. (Вы можете утверждать, что прогресс невозможен, если вы только придерживаетесь существующих стандартов, но это, очевидно, не главная причина, по которой они так поступают.)
tripleee
14

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. (Невероятно! Кто делает что-то подобное?!?)

Даниэль Брюкнер
источник
5

В основном «ANSI» относится к устаревшей кодовой странице в Windows. Смотрите также статью Раймонда Чена на эту тему:

Источником этого является тот факт, что кодовая страница Windows 1252 изначально была основана на проекте ANSI, который стал стандартом ISO 8859-1.

Первые 127 символов идентичны ASCII в большинстве кодовых страниц, однако верхние символы различаются.

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

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

детеныш
источник
4

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

[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:\>
Вернфрид Домшайт
источник
2

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

Эрик Петроэль
источник
1

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

jmucchiello
источник
-4

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

мофф
источник
6
Это не CP1252 для всех; это очень сильно зависит от региона.
Джои