| 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
●
Die deutschen Umlaute und ß sind grün
hervorgehoben.
LF...Line Feed CR...Carriage Return DEL..Delete |
●
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. |
|
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
Das Zeichen wird in das aktuelle Dokument eingesetzt.
Dezimalcode mit führender Null auf dem Ziffernblock (!) eingeben, danach ALT-Taste loslassen. |
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 TabellenAlle 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 wie ╩ wurden 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 |
||||||||||||
|
||||||||||||
|
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
|
|
|
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 € 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
End Functionunicode_chr = ChrW(unicode) Function unicode_asc(zeichen As String) As Long Dim uc As Long
uc = AscW(zeichen)
End Function
If uc < 0 Then uc = uc& + &H10000 unicode_asc = uc& |
|
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   maskiert. Auf der Konsole erhalten sie im Bereich $k>#7F den DOS-Code. |
Ein kleines PHP oder Perl-Programm (
Live-
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=" ";} 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 ASCII→ANSI. 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
|
// 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; |