Was ist das ANSI-Format?

216

Was ist das ANSI-Codierungsformat? Ist es ein Systemstandardformat? Inwiefern unterscheidet es sich von ASCII?

Web Dunia
quelle

Antworten:

245

ANSI-Codierung ist ein leicht allgemeiner Begriff, der sich auf die Standardcodepage eines Systems bezieht, normalerweise Windows. Auf westlichen / US-amerikanischen Systemen wird es besser als Windows-1252 bezeichnet. (Es kann bestimmte andere Windows-Codepages auf anderen Systemen darstellen.) Dies ist im Wesentlichen eine Erweiterung des ASCII-Zeichensatzes , da alle ASCII-Zeichen mit zusätzlichen 128 Zeichencodes enthalten sind. Dieser Unterschied ist auf die Tatsache zurückzuführen, dass die "ANSI" -Codierung 8-Bit und nicht 7-Bit ist, wie dies bei ASCII der Fall ist (ASCII wird heutzutage fast immer als 8-Bit-Bytes codiert, wobei das MSB auf 0 gesetzt ist). Im Artikel finden Sie eine Erklärung, warum diese Codierung normalerweise als ANSI bezeichnet wird.

Der Name "ANSI" ist eine Fehlbezeichnung, da er keinem tatsächlichen ANSI-Standard entspricht, aber der Name ist geblieben. ANSI ist nicht dasselbe wie UTF-8.

Noldorin
quelle
42
ANSI ist nicht nur eine "leichte" Fehlbezeichnung, es ist ein völlig falscher Name. Dieser Name impliziert eindeutig, dass alles, worauf er sich bezieht, ein ANSI-Standard ist, was er nicht ist. das ist eine schwarz-weiße Tatsache. Trotzdem ist es so weit verbreitet, dass wir daran festhalten.
Nate CK
1
Ich kenne ANSI als Code Page 437, nicht als Windows Code Page 1252. Als ANSI sich auf die Grafiken bezog, die für Bulletin-Board-Systeme erstellt wurden, kann ich so ziemlich garantieren, dass dies der Fall ist.
Lordscarlet
@lordscarlet: ANSI hat sie nicht standardisiert, aber Windows-1252 ist das nächstgelegene (zumindest unter Windows), da es eine Obermenge ist. Siehe en.wikipedia.org/wiki/ANSI_codepage#ANSI als Referenz.
Noldorin
4
"ANSI" bezieht sich eindeutig nicht auf einen ANSI-Standard. Es ist jedoch eine Tatsache, dass Sie "Encoding: ANSI" beispielsweise im Editor auswählen können, wenn Sie eine Datei speichern. Und die eigentliche Frage ist: "Was bedeutet das?" Diese Antwort ist bei weitem die beste.
Wernfried Domscheit
1
In meinem Fall bezog sich ANSI auf windows-1254.
Ramazan Polat
59

Technisch sollte ANSI mit US-ASCII identisch sein. Es bezieht sich auf den ANSI X3.4-Standard, bei dem es sich lediglich um die ratifizierte Version von ASCII der ANSI- Organisation handelt. Die Verwendung der Zeichen mit dem höchsten Bit-Satz ist in ASCII / ANSI nicht definiert, da es sich um einen 7-Bit-Zeichensatz handelt.

Der jahrelange Missbrauch des Begriffs durch die DOS- und anschließend die Windows-Community hat jedoch seine praktische Bedeutung als „Systemcodepage des jeweils verwendeten Computers“ verlassen. Die Systemcodepage wird manchmal auch als "mbcs" bezeichnet, da dies auf ostasiatischen Systemen eine Codierung mit mehreren Bytes pro Zeichen sein kann. Einige Codepages können sogar Top-Bit-Clear-Bytes als nachfolgende Bytes in einer Multibyte-Sequenz verwenden, daher ist es nicht einmal streng kompatibel mit einfachem ASCII ... aber selbst dann heißt es immer noch "ANSI".

In den Standardeinstellungen für die USA und Westeuropa ist „ANSI“ der Windows-Codepage 1252 zugeordnet. Dies ist nicht dasselbe wie ISO-8859-1 (obwohl es ziemlich ähnlich ist). Auf anderen Maschinen könnte es überhaupt etwas anderes sein. Dies macht "ANSI" als externe Codierungskennung völlig nutzlos.

Bobince
quelle
32

Genau genommen gibt es keine ANSI-Codierung. Umgangssprachlich wird der Begriff ANSI für verschiedene Codierungen verwendet:

  1. ISO 8859-1
  2. Windows CP1252
  3. Aktuelle Systemcodierung auf einem Windows-Computer (in der Win32-API-Terminologie).
Nemanja Trifunovic
quelle
Das ist falsch. Die Windows-Codepage 1252 wurde basierend auf ISO 8859-1 erstellt, ist jedoch nicht vollständig gleich. Der Begriff ANSI bezieht sich auf die Norm ISO 8859-x.
Patrik
17

Es war einmal, dass Microsoft wie alle anderen 7-Bit-Zeichensätze verwendete und ihre eigenen erfand, wenn es ihnen passte, obwohl sie ASCII als Kernuntermenge behielten. Dann stellten sie fest, dass die Welt auf 8-Bit-Codierungen umgestiegen war und dass es internationale Standards gab, wie zum Beispiel die ISO-8859-Familie. Wenn Sie damals einen internationalen Standard haben wollten und in den USA lebten, haben Sie ihn vom American National Standards Institute (ANSI) gekauft, das internationale Standards mit eigenem Branding und eigenen Nummern neu veröffentlichte (das liegt daran, dass die US-Regierung dies wünscht) Konformität mit amerikanischen Standards, nicht mit internationalen Standards). In der Microsoft-Kopie von ISO-8859 stand auf dem Cover "ANSI". Und weil Microsoft damals nicht sehr an Standards gewöhnt war, haben sie es nicht getan. Ich weiß nicht, dass ANSI auch viele andere Standards veröffentlicht hat. Daher verwiesen sie auf die Standards in der ISO-8859-Familie (und auf die Varianten, die sie erfunden hatten, weil sie damals die Standards nicht wirklich verstanden hatten) mit dem Namen auf dem Cover "ANSI" und fanden Eingang in Microsoft Benutzerdokumentation und damit in die Benutzergemeinschaft. Das war vor ungefähr 30 Jahren, aber manchmal hört man heute noch den Namen.

Michael Kay
quelle
Standards waren Branchenkram, also waren Programmierer neu in Standards, da es sich um eine neue Branche handelte?
CoffeDeveloper
1
Zum Zeitpunkt der Gründung von Microsoft war dies keine neue Branche.
Michael Kay
Microsoft hat eine problematische und kontroverse Haltung gegenüber der Interoperabilität im Allgemeinen. Als sie Ende der neunziger Jahre beschlossen, Standards zu "akzeptieren und zu erweitern", anstatt sie direkt zu meiden, war dies eine bemerkenswerte Änderung, obwohl immer noch kein verantwortungsbewusster Ansatz für eine ordnungsgemäße Interoperabilität. (Sie könnten argumentieren, dass Fortschritt unmöglich ist, wenn Sie nur bestehende Standards einhalten, aber das ist offensichtlich nicht der Hauptgrund, warum sie es so machen.)
Tripleee
14

ASCII definiert nur eine 7-Bit-Codepage mit 128 Symbolen. ANSI erweitert dies auf 8 Bit und es gibt mehrere verschiedene Codepages für die Symbole 128 bis 255.

Die Benennung ANSI ist nicht korrekt, da es tatsächlich die ISO / IEC 8859-Norm ist, die diese Codepages definiert. Siehe ISO / IEC 8859 als Referenz. Es gibt 16 Codepages ISO / IEC 8859-1 bis ISO / IEC 8859-16.

Windows-1252 basiert wieder auf ISO / IEC 8859-1, wobei einige Änderungen hauptsächlich im Bereich des C1-Steuerelements im Bereich von 128 bis 159 vorgenommen wurden. Wikipedia gibt an, dass Windows-1252 mit einer Sekunde auch als ISO-8859-1 bezeichnet wird Bindestrich zwischen ISO und 8859. (Unglaublich! Wer macht so etwas?!?)

Daniel Brückner
quelle
5

Grundsätzlich bezieht sich "ANSI" auf die ältere Codepage unter Windows. Siehe auch einen Artikel von Raymond Chen zu diesem Thema:

Die Ursache hierfür ist die Tatsache, dass die Windows-Codepage 1252 ursprünglich auf einem ANSI-Entwurf basierte, der zum ISO-Standard 8859-1 wurde.

Die ersten 127 Zeichen sind auf den meisten Codepages mit ASCII identisch, die oberen Zeichen variieren jedoch.

ANSI bedeutet jedoch nicht automatisch CP1252 oder Latin 1.

Ungeachtet aller Verwirrung sollten Sie solche Probleme heutzutage einfach vermeiden und Unicode verwenden.

Joey
quelle
4

Nur für den Fall, dass Ihr PC kein "westlicher" PC ist und Sie nicht wissen, welche Codepage verwendet wird, können Sie sich diese Seite ansehen: NLS-API-Referenz (National Language Support)

[Microsoft hat diese Referenz entfernt und nimmt sie aus der NLS-API-Referenz (National Language Support) des Webarchivs

Oder Sie können Ihre Registrierung abfragen:

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
quelle
2

Bei Verwendung von Einzelbytezeichen definiert das ASCII-Format die ersten 127 Zeichen. Die erweiterten Zeichen von 128 bis 255 werden von verschiedenen ANSI-Codepages definiert, um eine eingeschränkte Unterstützung für andere Sprachen zu ermöglichen. Um eine ANSI-codierte Zeichenfolge zu verstehen, müssen Sie wissen, welche Codepage sie verwendet.

Eric Petroelje
quelle
1

Ich erinnere mich, als sich "ANSI" -Text auf die Pseudo-VT-100-Escape-Codes bezog, die in DOS über den ANSI.SYS-Treiber verwendet werden können, um den Fluss von Streaming-Text zu ändern. Wahrscheinlich nicht das, worauf Sie sich beziehen, aber wenn es http ist: //en.wikipedia.org/wiki/ANSI_escape_code

jmucchiello
quelle
-4

ANSI (auch bekannt als Windows-1252 / WinLatin1) ist eine Zeichenkodierung des lateinischen Alphabets, die ISO-8859-1 ziemlich ähnlich ist . Vielleicht möchten Sie einen Blick auf Wikipedia werfen .

moff
quelle
6
Es ist nicht für jeden CP1252; das hängt sehr stark von der region ab.
Joey