Co to jest format ANSI?

Odpowiedzi:

246

Kodowanie ANSI to nieco ogólny termin używany w odniesieniu do standardowej strony kodowej w systemie, zwykle Windows. W systemach zachodnich / amerykańskich jest bardziej poprawnie określany jako Windows-1252 . (Może reprezentować niektóre inne strony kodowe Windows w innych systemach.) Jest to zasadniczo rozszerzenie zestawu znaków ASCII , ponieważ obejmuje wszystkie znaki ASCII z dodatkowymi 128 znakami. Ta różnica wynika z faktu, że kodowanie „ANSI” jest 8-bitowe, a nie 7-bitowe tak jak ASCII (ASCII jest prawie zawsze kodowane obecnie jako 8-bitowe bajty z MSB ustawionym na 0). Zobacz artykuł wyjaśniający, dlaczego to kodowanie jest zwykle określane jako ANSI.

Nazwa „ANSI” jest myląca, ponieważ nie odpowiada żadnemu faktycznemu standardowi ANSI, ale nazwa utknęła. ANSI to nie to samo co UTF-8.

Noldorin
źródło
42
ANSI to nie tylko „niewielka” myląca nazwa, to zupełnie błędna nazwa. Ta nazwa wyraźnie wskazuje, że cokolwiek się do niej odnosi, jest standardem ANSI, a nie jest; to jest czarno-biały fakt. Powiedziawszy to, jest tak szeroko stosowany, że utknęliśmy z nim.
Nate CK,
1
Wiem, że ANSI jest kodem strony 437, a nie kodem strony 1252 systemu Windows. Kiedy ANSI odwoływało się do grafiki stworzonej dla systemów tablic ogłoszeń, jestem w stanie prawie tego zagwarantować.
lordscarlet,
@lordscarlet: ANSI ich nie ustandaryzował, ale Windows-1252 jest najbliższy (przynajmniej w Windows), ponieważ jest nadzbiorem. Zobacz en.wikipedia.org/wiki/ANSI_codepage#ANSI w celach informacyjnych.
Noldorin
4
„ANSI” wyraźnie nie odnosi się do żadnego standardu ANSI, jednak faktem jest, że można wybrać „Kodowanie: ANSI” na przykład w Notatniku podczas zapisywania pliku. Właściwe pytanie brzmi: „co to znaczy”? Ta odpowiedź jest zdecydowanie najlepsza.
Wernfried Domscheit
1
W moim przypadku ANSI miał na myśli windows-1254.
Ramazan Polat
59

Technicznie ANSI powinien być taki sam jak US-ASCII. Odnosi się do normy ANSI X3.4, która jest po prostu ratyfikowaną wersją ASCII organizacji ANSI . Użycie znaków najwyższego zestawu bitów nie jest zdefiniowane w ASCII / ANSI, ponieważ jest to 7-bitowy zestaw znaków.

Jednak lata niewłaściwego używania tego terminu przez DOS, a następnie społeczność Windows pozostawiły swoje praktyczne znaczenie jako „systemowa strona kodowa dowolnego komputera, który jest używany”. Systemowa strona kodowa jest również czasami nazywana „mbcs”, ponieważ w systemach wschodnioazjatyckich może to być kodowanie wielobajtowe na znak. Niektóre strony kodowe mogą nawet wykorzystywać bajty o najwyższej wartości bitowej jako końcowe bajty w sekwencji wielobajtowej, więc nie są nawet ściśle zgodne ze zwykłym ASCII ... ale nawet wtedy nadal nazywa się to „ANSI”.

W ustawieniach domyślnych w USA i Europie Zachodniej „ANSI” odwzorowuje na stronę kodową Windows 1252. Nie jest to to samo co ISO-8859-1 (chociaż jest dość podobne). Na innych komputerach może to być cokolwiek innego. To sprawia, że ​​„ANSI” jest całkowicie bezużyteczne jako zewnętrzny identyfikator kodowania.

Bobin
źródło
32

Ściśle mówiąc, nie ma czegoś takiego jak kodowanie ANSI. Potocznie termin ANSI jest używany dla kilku różnych kodowań:

  1. ISO 8859-1
  2. Windows CP1252
  3. Bieżące kodowanie systemu na komputerze z systemem Windows (w terminologii API Win32).
Nemanja Trifunovic
źródło
To jest złe. Strona kodowa Windows 1252 została utworzona w oparciu o ISO 8859-1, ale nie jest całkowicie równa. Termin ANSI odnosi się do normy ISO 8859-x.
Patrik,
17

Dawno, dawno temu Microsoft, podobnie jak wszyscy inni, używał 7-bitowych zestawów znaków i wymyślili własne, gdy im to odpowiadało, chociaż zachowali ASCII jako podstawowy podzbiór. Potem zdali sobie sprawę, że świat przeszedł na kodowanie 8-bitowe i że istnieją międzynarodowe standardy, takie jak rodzina ISO-8859. W tamtych czasach, jeśli chciałeś zdobyć międzynarodowy standard i mieszkałeś w USA, kupiłeś go od American National Standards Institute, ANSI, który opublikował międzynarodowe standardy z własną marką i numerami (to dlatego, że rząd USA chce zgodność ze standardami amerykańskimi, a nie międzynarodowymi). Tak więc kopia ISO-8859 Microsoftu zawierała „ANSI” na okładce. A ponieważ Microsoft nie był bardzo przyzwyczajony do standardów w tamtych czasach, nie „ Zdaję sobie sprawę, że ANSI opublikowało również wiele innych standardów. Odnieśli się więc do standardów z rodziny ISO-8859 (i wariantów, które wymyślili, ponieważ tak naprawdę nie rozumieli standardów w tamtych czasach) pod nazwą na okładce „ANSI” i trafił do Microsoft dokumentacja użytkownika, a tym samym do społeczności użytkowników. To było około 30 lat temu, ale wciąż czasem słyszysz tę nazwę.

Michael Kay
źródło
standardy były branżowe, więc programiści byli nowi od standardów, ponieważ była to nowa branża?
CoffeDeveloper
1
Do czasu założenia Microsoft nie była to nowa branża.
Michael Kay
Microsoft ma ogólnie problematyczne i kontrowersyjne podejście do interoperacyjności. Kiedy pod koniec lat 90. podjęli decyzję o „przyjęciu i rozszerzeniu” standardów zamiast bezpośredniego ich unikania, była to niezwykła zmiana, choć nadal nie odpowiedzialne podejście do właściwej interoperacyjności. (Ty mógł twierdzić, że postęp jest niemożliwy, jeśli tylko stosować się do obowiązujących norm, ale nie jest to oczywiście główny powód robią to w ten sposób.)
tripleee
14

ASCII właśnie definiuje 7-bitową stronę kodową ze 128 symbolami. ANSI rozszerza to do 8 bitów i istnieje kilka różnych stron kodowych dla symboli 128 do 255.

Nazewnictwo ANSI jest niepoprawne, ponieważ w rzeczywistości jest to norma ISO / IEC 8859, która definiuje te strony kodowe. Zobacz ISO / IEC 8859 w celach informacyjnych. Istnieje 16 stron kodowych ISO / IEC 8859-1 do ISO / IEC 8859-16.

Windows-1252 jest ponownie oparty na ISO / IEC 8859-1 z pewnymi modyfikacjami głównie w zakresie zestawu kontrolnego C1 w zakresie od 128 do 159. Wikipedia stwierdza, że ​​Windows-1252 jest również określany jako ISO-8859-1 z drugim łącznik między ISO a 8859. (Niewiarygodne! Kto coś takiego robi ?!?)

Daniel Brückner
źródło
5

Zasadniczo „ANSI” odnosi się do starszej strony kodowej w systemie Windows. Zobacz także artykuł Raymonda Chena na ten temat:

Źródłem tego jest fakt, że strona kodowa Windows 1252 była pierwotnie oparta na szkicu ANSI, który stał się normą ISO 8859-1.

Pierwsze 127 znaków jest identycznych jak ASCII na większości stron kodowych, jednak górne znaki się różnią.

Jednak ANSI nie oznacza automatycznie CP1252 lub Latin 1.

Niezależnie od wszelkich nieporozumień powinieneś po prostu unikać takich problemów w dzisiejszych czasach i używać Unicode.

Joey
źródło
4

Jeśli Twój komputer nie jest komputerem typu „western” i nie wiesz, która strona kodowa jest używana, możesz przejrzeć tę stronę: Dokumentacja interfejsu API obsługi języka narodowego (NLS)

[Microsoft usunął to odniesienie, weź je z archiwum interfejsu API języka narodowego (NLS) API Reference

Lub możesz wysłać zapytanie do rejestru:

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:\>
Wernfried Domscheit
źródło
2

Podczas korzystania ze znaków jednobajtowych format ASCII określa pierwsze 127 znaków. Rozszerzone znaki od 128-255 są zdefiniowane przez różne strony kodowe ANSI, aby umożliwić ograniczoną obsługę innych języków. Aby zrozumieć ciąg znaków zakodowany w ANSI, musisz wiedzieć, której strony kodowej używa.

Eric Petroelje
źródło
1

Pamiętam, kiedy tekst „ANSI” odwoływał się do pseudo kodów ucieczki VT-100 używanych w systemie DOS za pośrednictwem sterownika ANSI.SYS w celu zmiany przepływu tekstu przesyłanego strumieniowo .... Prawdopodobnie nie to, o czym mówisz, ale jeśli jest widoczne http: //en.wikipedia.org/wiki/ANSI_escape_code

jmucchiello
źródło
-4

ANSI (alias Windows-1252 / WinLatin1) to kodowanie znaków alfabetu łacińskiego, dość podobne do ISO-8859-1 . Możesz zajrzeć na Wikipedię .

moff
źródło
6
To nie CP1252 dla wszystkich; zależy to bardzo od regionu.
Joey,