ASCII

American Standard Code for Information Interchange

Die 128 Zeichen des ASCII-Code bildet die Grundlage wichtiger IT-Bereiche, z.B. des Internet, der meisten Programmiersprachen und der Datenbank-Sprache SQL. Obwohl dieser Code für die Darstellung von Zeichen nur mehr wenig Bedeutung hat, wird er von jedem Computer beherrscht. Der ASCII-Code ist als Teilmenge in vielen anderen Codes enthalten.
Diese Webseite verwendet teilweise Unicode-Zeichen.
Beispiel: α β γ δ
Wenn sie keine Pfeile und griechischen Zeichen sehen, dann versteht ihr Browser (ältere Version) keinen Unicode.
Alle Zeichen dieser Seite lassen sich kopieren und in Standard-Programme einsetzen. Verwenden sie dafür nur Standard Schrift-Familien (die auch Unicode beherrschen).
Zeichencodes PC-Codes für Buchstaben, Ziffern und Sonderzeichen
ASCII-Code Code-Tabellen für ASCII und 'Latin-1'
DOS-Code Code-Tabellen für diesen Uralt-Code
Win-125* Der Alleingang von M$
Detail-Code Detaillierte Code-Tabelle für ASCII/DOS und ANSI
Bereich #80..9F Alleingang abseits von ISO-8859 und Unicode
Programmierung Umwandlung Code Zahl in Programmiersprachen
ASCII ANSI Umwandlung ASCII ANSI (ascii2ansi, ansi2ascii)

Zeichen- Tabellen ASCII und 'Latin-1'

Der 7-Bit ASCII-Code (American Standard Code for Information Interchange) stellt die Zeichen-Grundlage der meisten Informatik-Gebiete dar (z.B. Programmiersprachen).
Er wurde im US-Standard ANSI X3.4-1986 definiert.
Der ASCII-Code ist identisch mit dem → Unicode-Zeichensatz U0000.
Die 128 Zeichen dieses Code sind als fixer Bestandteil in den meisten anderen Zeichen-Codes enthalten.
Der ASCII-Code umfasst nur die Zeichen 0..127 (#00..7F). Alle darüber hinausgehenden Codes sind nicht Teil des ASCII-Standards.
Der Code-Bereich 128..255 (#80..FF) gehört nicht mehr zum ASCII-Bereich. Die kleinste Speicher-Zelle eines PC umfasst normalerweise 1 Byte = 8 Bit und kann 256 Zeichen darstellen, also 0.255 (#00..FF), d.h. noch 128 Zeichen zusätzlich zum ASCII-Standard.
Die häufigste Variante für die Belegung dieser 128 zusätzlichen Zeichen ist → Unicode U0080.
Zusammen mit U0000 für die ersten 128 Zeichen ergibt das den Standard → ISO-8859-1. M$-Betriebssysteme verwenden leider eine abweichende Varianten (' → CP-1252', 'ANSI').
Hinweise zu den Code-Tabellen:
Beim Überfahren eines Zeichens mit der Maus wird sein Code hexadezimal (als Unicode) und dezimal (mit Punkt) angezeigt.
Nicht druckbare Steuerzeichen sind hellgelb unterlegt, z.B.:
HT...(horizontaler) Tabulator
LF...Line Feed
CR...Carriage Return
DEL..Delete
Die deutschen Umlaute und ß sind grün hervorgehoben.
Hinweis für EntwicklerInnen:
Beide Tabellen sind als → 'InnenRahmen' <iframe> in diese Webseite eingebettet. Beide Rahmen enthalten die gleiche Webseite.
Der Inhalt der Zeichen-Tabelle wird Live mit → Javascript erzeugt.
Durch → Übergabe von Argumenten an Javascript wird entschieden, welche Tabelle angezeigt wird.

→ Cygwin enthält das Konsolen-Programm ascii.exe, mit dem man Live ASCII-Code und → ISO-88549-1 (Latin-1) anzeigen kann.
Tastatur:
Wenn man den ASCII- bzw. ANSI-Code eines Zeichens kennt, dann lässt sich der dezimale Code auch direkt auf der Tastatur eingeben:
Dazu muss der Ziffernblock auf "numerisch" eingestellt sein (NUM-Lock, meist mit Kontroll-Anzeige).
ALT-Taste gedrückt halten
Dezimalcode mit führender Null auf dem Ziffernblock (!) eingeben, danach
ALT-Taste loslassen.
Das Zeichen wird in das aktuelle Dokument eingesetzt.

Das funktioniert in Win-Systemen mit jedem Dokument.
Zum Auffinden der Codezahl verwenden sie z.B. diese Webseite oder das Programm charmap.exe

Beachten sie die führende Null, ansonsten werden die Zeichen des uralten → DOS-Codes eingesetzt.

Beispiel: Mit ALT+0223 erhalten sie das ß

DOS-Code Tabellen

Alle Angaben natürlich ohne Gewähr ! - Beachten sie die Hinweise zu den Tabellen !
Es gibt nicht 'den' DOS-Zeichencode, sondern zahlreiche Varianten. Daher ist Vorsicht geboten, alle Angaben erfolgen ohne Gewähr. Die Zeichen sind teilweise sogar von der verwendeten Schrift-Familie abhängig.

Nur wenige Sonderzeichen dieses Codes haben noch Bedeutung für → Konsolen-Programme: Die deutschen Umlaute und ß sind grün unterlegt.

Einige Zeichen (z.B. Pseudografik) kann ihr Browser nur amzeigen, wenn er → Unicode beherrscht.
'Pseudografik'-Zeichen wiewurden in Uralt-Software gerne zur Gestaltung von Formularen eingesetzt.

Der Code-Bereich 0..127 (#00..FF) ist zwar prinzipiell identisch mit Standard-ASCII (s.o.), unter bestimmten Bedingungen (siehe rechts) werden jedoch an Stelle der Steuerzeichen 0..31 (#00..1F) die hier gezeigten Zeichen ausgegeben.

Im Gegensatz zu anderen Zeichen-Tabellen sind hier keine Zeichen-Bilder enthalten, sondern echte (Unicode)-Zeichen. Sie können jedes einzelne Zeichen kopieren und in anderen Programmen weiter verwenden.
Tastatur-Eingabe:
Auf M$-Betriebssystemen können sie 'DOS'-Zeichen mit ihrem dezimalen Code 0..255 über die Tastatur eingeben. Der Ziffernblock muss auf "numerisch" eingestellt sein.
ALT-Taste gedrückt halten
Code auf dem Ziffernblock (!) eingeben, danach
ALT-Taste loslassen.

Beim Loslassen der ALT-Taste wird das Zeichen in das gerade verwendete Dokument eingesetzt.

Beispiel:
Mit ALT+3 erhalten sie das.
Mit ALT+225 erhalten sie das ß.
Achtung - Wenn sie den Code mit führender Null (!) eingeben, erhalten sie das → ANSI-Zeichen (s.o.)
Mit ALT+0225 erhalten sie das á.

Detaillierte Code-Tabelle

 
DecOctHexesc HTMLANSIASCIIName (ANSI)
 
Die ersten 3 Spalten geben die Code-Zahl in verschiedenen Zahlensystemen an: Dezimal, Octal und Hexadezimal.
Spalte esc gibt an, wie bestimmte Zeichen zu → maskieren sind, z.B. für die Programmiersprachen C++, Javascript, Perl, PHP.
Spalte HTML gibt an, wie das Zeichen in → HTML-Code angegeben wird.
Spalte ANSI gibt den Windows-Code an, Spalte ASCII den ASCII-Code für Zeichen 0..127, den DOS-Code für Zeichen 128..255.
Spalte Name enthält die Standard- und sonstigen Namen für das jeweilige ANSI-Zeichen. Nicht druckbare Kontrollzeichen sind rot hervorheboben.

Der Code-Bereich #80..#9F

Die Standard-Zeichensätze → ISO-8859 und → Unicode führen im Bereich #80..9F (128..159) nicht druckbare Kontrollzeichen. Betriebssysteme und Programme des IT-Marktführers verwenden leider eine davon abweichende Version ('ANSI', Details unter → CP-1252), welche die meisten dieser Codes für druckbare Zeichen verwendet. Alle hier verwendeten Zeichen sind in den Standard-Zeichensätzen an anderen Stellen codiert.

M$-Software neigt stark zur Verwendung von 'ANSI'-Zeichen - Leider auch dann, wenn ausdrücklich ISO- 8859 oder Unicode vereinbart wurde. Das ist die Ursache vieler schwierig zu findender Fehler und teurer Sonder-Maßnahmen in Software. Verwenden sie - wenn möglich - immer eindeutigen Unicode !

Die folgende Verweis-Liste (lookup table) zeigt, welche Zeichen von → CP-1250 im Bereich #80..9F verwendet werden (ohne Gewähr):
Sämtliche 'ANSI'-Zeichen dieses Bereichs werden von M$-Programmen korrekt verwendet, wenn sie mit ihrem Standard-Unicode codiert werden.
Wenn möglich sollten sie daher diese Zeichen immer mit dem Standard Unicode codieren, nicht mit 'ANSI' - das funktioniert überall und vermeidet Probleme.

Das wichtigste Beispiel: Codieren sie das -Zeichen mit → Unicode chr(0x20AC) oder chr(8364) oder &euro; jedoch niemals mit → CP-1250-Code chr(0x80) oder chr(128).

ASCII und ANSI in Programmiersprachen

Jede Programmiersprache bietet Möglichkeiten zur Verarbeitung von einzelnen Zeichen und 'Strings' aus mehreren Zeichen.
In diesem Kapitel finden sie ausgewählte Funktionen für einzelne Zeichen.
Tipp: Der Variablen-Typ 'Integer' eignet sich nicht für Unicode, da sein Wertebereich meist bei 32767. endet ( je nach System). Verwenden sie besser andere Typen wie z.B. 'Long'.
Tipp: Verwenden sie für neue Entwicklungen nur → Unicode-kompatible-Funktionen !
Umwandlung Codezahl → Zeichen:
Variable n repräsentiert eine ganze dezimale Zahl im Bereich 0..255. bzw. hh eine hexadezimale Zahl im Bereich 00..FF.
Manchmal ist mit hhhh auch die Hex-Angabe der ersten 0000..FFFF → Unicode-Zeichen möglich.
Rechts einige Möglichkeiten, die Zahl in ein Zeichen umzuwandeln.
Die Zeichen < 32. (#20) und 127. (#7F) sowie 128. (#80)..159.(#9F) (→ ISO-8859 und → Unicode) dienen als nicht druckbare Steuerzeichen.
Alle anderen Zeichen können ausgegeben werden, z.B. auf einem Monitor oder auf einem Drucker.
Excel/OpenOffice: ZEICHEN(n)
HTML: &#n; oder &#xh; bis &#xhhhh;
C++: char(n)
CSS (content): "\hhhh "
JS: "\uhhhh" oder String.fromCharCode(n) oder String.fromCharCode(0xhh);
Perl: "\xhh" oder "0xhh" oder chr($n) oder chr(0xhh)
PHP: chr($n)
SQL(MySQL): CHAR('n')
VBA: Chr(n) bzw. ChrW(n)
Umwandlung Zeichen → Codezahl:
Variable c repräsentiert ein Zeichen, s einen String (Zeichenkette). Einige Funktionen decodieren immer das erste Zeichen eines längeren Strings, darauf sollten sie sich jedoch nicht verlassen: Isolieren sie das gewünschte Zeichen vor Decodierung. Das Ergebnis der gezeigten Funktionen ist eine ganze Zahl im Bereich 0..255.
Excel/OpenOffice: CODE(c)
C++: int(c)
JS: s.charCodeAt(0)
Perl: ord($c)
PHP: ord($c)
SQL(MySQL): ASCII('c')
VBA: Asc(c) bzw. AscW(c)
VBA
Bei allen Produkten des IT-Marktführers muss man besonders auf den → Code-Bereich #80..#9F achten: Details dazu in einem eigenen ↑ Kapitel. Die hier gezeigten Beispiele arbeiten mit Unicode U+0000..U+FFFF.

Beispiel unicode_chr:
Diese Funktion gibt immer das Unicode-Zeichen zurück (auch korrekt im Bereich U+80..U+9F).

Beispiel unicode_asc:
Diese Funktion gibt immer die Unicode-Zahl eines Zeichens zurück. Die VBA-Standardfunktion AscW kann fehlerhafte negative Werte zurückgeben, das wird hier korrigiert.
Function unicode_chr(unicode As Long) As String
If (unicode < 0) Then unicode = 0
unicode_chr = ChrW(unicode)
End Function

Function unicode_asc(zeichen As String) As Long
Dim uc As Long
uc = AscW(zeichen)
If uc < 0 Then uc = uc& + &H10000
unicode_asc = uc&
End Function
Tipps & Tricks:
Kleinbuchstaben liegen im ASCII & ANSI-Code um den Betrag 32. (#20) höher als die entsprechenden Großbuchstaben. Wenn ein Zeichen sicher (!) ein Buchstabe ist, dann kann man es durch Addition bzw. Subtraktion der Zahl 32 klein/groß umwandeln.
Das gilt auch für die deutschen Umlaute äöü sowie für die meisten anderen Sonderzeichen, die aus lateinischen Buchstaben abgeleitet sind.
Die Zeichen $ _ zählen in manchen IT-Bereichen ebenfalls zu den Buchstaben.

Leider folgen die Zeichen 9 und A nicht unmittelbar aufeinander. Daher muss man bei der Umwandlung von / nach Hexadezimal-Code die dazwischen liegenden 7 Zeichen überspringen.
Verwenden sie bei eigenen Entwicklungen sicherheitshalber keines der ANSI-Zeichen #80..#9F, sondern an deren Stelle die entsprechenden → Unicode-Zeichen. ANSI ist in diesem Bereich nicht konform mit Unicode und dem Standard → ISO-8859-1.
Im Bereich $k<=#7F wird der ASCII-Code ausgegeben.
Dort können sie statt des HTML-Codes &#$k; auch direkt das Zeichen chr($k) ausgeben.
Im Bereich #80..#9F wird meist der 'ANSI-Code' (Windows-1252) ausgegeben.
Oberhalb >#9F ist der ANSI-Code identisch mit ISO-8859-1 (Latin-1).
Dieses Programm läuft ohne Änderung auch in → Perl.
Perl arbeitet auch im Bereich >#7F mit chr($k) , PHP muss jedoch den → HTML-Code &#$k;verwenden.
Mit Perl können sie die Zeichen auch auf der Konsole ausgeben, dann müssen sie jedoch chr($k) statt des HTML-Codes verwenden, das Leerzeichen (#20) wird nicht mit &#160; maskiert.
Auf der Konsole erhalten sie im Bereich $k>#7F den DOS-Code.
Ein kleines PHP oder Perl-Programm ( Live-Live-PHP-Test) zur Ausgabe der Zeichen 0..255 (hex 00..FF). An Stelle der nicht druckbaren Steuerzeichen wird ein Punkt . ausgegeben.
for($i=0;$i<16;$i++) {
print sprintf("%X",$i);
for($j=0;$j<16;$j++) {
$k=16*$i+$j;
//$c=chr($k);
if($i<2) {$c=".";}
if($k==32) {$c="&#160;";}
if($k>126 && $k<160) {$c=".";}
else {$c="&#$k;";}
print " $c";
}
print "<br>\n";
}

Umwandlung ASCII ↔ ANSI

Werkzeuge ascii2ansi und ansi2ascii
Mit Programmen der Programmiersprache C++ lassen sich beliebige Zeichencode-Umwandlungen besonders rasch ausführen.
Das Beispiel rechts demonstriert (vereinfacht) die Umwandlung ASCIIANSI.
In C++ gibt es keinen Unterschied zwischen Zeichen und 1-Byte-Zahlen. Es kommt auf das Ausgabe-Format an (%c,%d), wie ein Zeichen angezeigt wird.

Die Umwandlung erfolgt mit Hilfe einer ('Lookup')-Tabelle t. Diese Methode wird angewendet, wenn die Umwandlung keinem Algorithmus folgt. Da die beiden Codes im Bereich 0..126 übereinstimmen, werden nur Zeichen >126 umgewandelt.
Einige ASCII-Zeichen haben in ANSI keine Entsprechung (und umgekehrt), sie werden hier mit Code 63 (Zeichen ? ) übersetzt.
Mit etwas Geschick können sie aus der Lookup-Tabelle t die 'inverse' Tabelle für ansi2ascii erzeugen.
Alle Angaben ohne Gewähr, Verwendung auf eigenes Risiko !

Anwendung (Win:):
C:\> ascii2ansi umwandeln.txt
oder
C:\> ascii2ansi in.txt out.txt

Download der beiden Win-Programme ascii2ansi.exe und ansi2ascii.exe als komprimiertes Archiv (zip).

Cygwin enthält das Konsolen-Programm ascii.exe zur Anzeige von ASCII-Code bzw. → ISO-88549-1 (Latin-1) Code auf einer Text-Konsole.
// ascii2ansi
#include <stdio.h>
int main(int argc, char* argv[]) {
int i,ic;
char inpath[]="in.txt";
char outpath[]="out.txt";
char line[1024];
FILE *instream,*outstream;
int t[]={63,199,252,233,226,228,224,229,231,
234,235,232,239,238,236,196,197,201,230,198,
244,246,242,251,249,255,214,220,248,163,216,
215,131,225,237,243,250,241,209,170,186,191,
174,172,189,188,161,171,187,63,63,63,63,63,
193,194,192,169,63,63,63,63,162,165,63,63,
63,63,63,63,63,227,195,63,63,63,63,63,63,63,
164,240,208,202,203,200,63,205,206,207,63,
63,63,63,166,204,63,211,223,212,210,245,213,
181,254,222,218,219,217,253,221,175,180,173,
177,63,190,182,167,247,184,176,168,183,185,
179,178,63,160};
instream = fopen(inpath,"rt");
outstream = fopen(outpath,"wt");
while (fgets(line,1000,instream) != NULL) {
for(i=0;i<int(strlen(line));i++) {
ic=int(line[i]);
if(ic<0) {ic+=256;}
if(ic>126) {
ic=t[ic-127];
line[i]=ic;
}
}
fputs(line,outstream);
}
fclose(instream);
fclose(outstream);
return 0;
}

XHTML CSS