Що таке формат 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

@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" абсолютно марним як зовнішній ідентифікатор кодування.


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, який переопублікував міжнародні стандарти з власним брендом і номерами (це тому, що уряд США хоче відповідність американським стандартам, а не міжнародним стандартам). Тож копія Microsoft ISO-8859 написала "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 кодових сторінок ISO / IEC 8859-1 до ISO / IEC 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 або латинську 1.

Будь-яка плутанина, незважаючи на те, що ви просто просто уникаєте подібних проблем в даний час і користуйтеся Unicode.


4

Про всяк випадок, якщо ваш ПК не є «західним» ПК, і ви не знаєте, яка кодова сторінка використовується, ви можете ознайомитися з цією сторінкою: Довідник 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:\>

2

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


1

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


-4

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


6
Це не CP1252 для всіх; це дуже залежить від регіону.
Джой
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.