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

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


person web dunia    schedule 31.03.2009    source источник


Ответы (10)


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

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

person Noldorin    schedule 31.03.2009
comment
Я знаю ANSI как кодовую страницу 437, а не как кодовую страницу Windows 1252. Когда ANSI ссылался на графику, созданную для систем досок объявлений, я могу в значительной степени гарантировать, что это так. - person Doug Moore; 22.08.2013
comment
@lordscarlet: ANSI не стандартизировал их, но Windows-1252 является наиболее близким к вам (по крайней мере, в Windows), поскольку это надмножество. Для справки см. en.wikipedia.org/wiki/ANSI_codepage#ANSI. - person Noldorin; 23.08.2013
comment
ANSI явно не относится к какому-либо стандарту ANSI, однако на самом деле вы можете выбрать Encoding: ANSI, например, в Блокноте при сохранении файла. И собственно вопрос: что это значит? Этот ответ, безусловно, лучший. - person Wernfried Domscheit; 15.03.2018
comment
В моем случае ANSI имел в виду windows-1254. - person Ramazan Polat; 11.10.2019
comment
Обсуждение здесь, в комментариях, того, что это на самом деле означает, является прекрасной иллюстрацией того, почему это не термин проблематичен; это не совсем четкое определение. - person tripleee; 16.08.2020
comment
Почему вы говорите 8-битные байты? Байт по определению 8 бит. - person David Klempfner; 19.02.2021
comment
Да, хотя «только» в современном общепринятом определении, и даже тогда иногда бывает некоторая гибкость в таких контекстах, как этот. См., Например, Википедия: Исторически байт - это количество битов, используемых для кодирования одного символа текста на компьютере. - person Noldorin; 19.02.2021

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

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

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

person bobince    schedule 31.03.2009

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

  1. ISO 8859-1
  2. Окна CP1252
  3. Текущая системная кодировка на машине Windows (в терминологии Win32 API).
person Nemanja Trifunovic    schedule 31.03.2009
comment
Это не правильно. Кодовая страница Windows 1252 была создана на основе ISO 8859-1, но не полностью аналогична. Термин ANSI относится к стандарту ISO 8859-x. - person Patrik; 10.01.2020
comment
@Patrik Нет, это не так. Есть ситуации, когда эта интерпретация действительно верна, но, как это и несколько других ответов здесь наглядно иллюстрируют, вы не можете сказать без дополнительного контекста. - person tripleee; 16.08.2020

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

person Michael Kay    schedule 22.09.2014
comment
стандарты были отраслью, поэтому программисты были новичками в стандартах, поскольку это была новая отрасль? - person CoffeDeveloper; 03.03.2015
comment
К моменту основания Microsoft это была не новая отрасль. - person Michael Kay; 03.03.2015
comment
У Microsoft проблемное и неоднозначное отношение к взаимодействию в целом. Когда в конце 1990-х они решили принять и расширить стандарты вместо того, чтобы напрямую избегать их, это было примечательным изменением, хотя все еще не ответственным подходом к надлежащему взаимодействию. (Вы могли возразить, что прогресс невозможен, если вы будете придерживаться только существующих стандартов, но это, очевидно, не основная причина, по которой они делают это таким образом.) - person tripleee; 01.06.2018

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

Именование ANSI неверно, потому что на самом деле эти кодовые страницы определяются нормой ISO / IEC 8859. Для справки см. ISO / IEC 8859. Есть 16 кодовых страниц от ISO / IEC 8859-1 до ISO / IEC 8859-16.

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

person Daniel Brückner    schedule 31.03.2009

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

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

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

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

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

person Joey    schedule 31.03.2009

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

[Microsoft удалила эту ссылку, возьмите ее из веб-архива Справочник по API поддержки национальных языков (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:\>
person Wernfried Domscheit    schedule 25.03.2015

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

person Eric Petroelje    schedule 31.03.2009

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

person jmucchiello    schedule 31.03.2009

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

person moff    schedule 31.03.2009
comment
Это не CP1252 для всех; это очень сильно зависит от региона. - person Joey; 24.01.2013