Zum Hauptinhalt springen

3. Zeichencodierung

Datenpakete bestehen aus verschiedenen Zahlen und Zeichen. Wie lassen sich diese in Einsen und Nullen übersetzen? Auf dem Computer ist jedem Zeichen eine eindeutige Zahl zugeordnet - eine sog. Zeichencodierung. Eine gängige Zeichencodierung ist etwa ASCII, 128 Zeichen, wobei für ein Zeichen genau 7 bit, also 7 Stellen mit 0 oder 1, notwendig sind. In diesen 128 möglichen Zeichen sind 33 Steuerzeichen und 95 normale Zeichen enthalten.

Steuerzeichen

spezielle Zeichen wie bspw. das Zeichen \n für einen Zeilenumbruch oder \t für einen Tabulator.

Die ASCII-Codierung enthält noch keine Umlaute, weshalb mit Latin 1, 256 Zeichen der Informationsgehalt um ein Bit erhöht wurde, so dass insgesamt 256 Zeichen codiert werden können - die ersten 128 Zeichen sind dabei identisch mit ASCII.

ZeichenDezimalBinär
\n1000001010
3200100000
!3300100001
&3800100110
.4600101110
,4400101100
-4500101101
.4600101110
/4700101111
04800110000
14900110001
25000110010
35100110011
45200110100
55300110101
65400110110
75500110111
85600111000
95700111001
:5800111010
=6100111101
?6300111111
@6401000000
A6501000001
B6601000010
C6701000011
ZeichenDezimalBinär
D6801000100
E6901000101
F7001000110
G7101000111
H7201001000
I7301001001
J7401001010
K7501001011
L7601001100
M7701001101
N7801001110
O7901001111
P8001010000
Q8101010001
R8201010010
S8301010011
T8401010100
U8501010101
V8601010110
W8701010111
X8801011000
Y8901011001
Z9001011010
a9701100001
b9801100010
c9901100011
ZeichenDezimalBinär
d10001100100
e10101100101
f10201100110
g10301100111
h10401101000
i10501101001
j10601101010
k10701101011
l10801101100
m10901101101
n11001101110
o11101101111
p11201110000
q11301110001
r11401110010
s11501110011
t11601110100
u11701110101
v11801110110
w11901110111
x12001111000
y12101111001
z12201111010
ä22811100100
ö24611110110
ü25211111100
Komplette Latin 1 Tabelle
ZeichenDezimalBinär
000000000
100000001
200000010
300000011
400000100
500000101
600000110
700000111
800001000
\t900001001
\n1000001010
1100001011
1200001100
1300001101
1400001110
1500001111
1600010000
1700010001
1800010010
1900010011
2000010100
2100010101
2200010110
2300010111
2400011000
2500011001
2600011010
2700011011
2800011100
2900011101
3000011110
3100011111
3200100000
!3300100001
"3400100010
#3500100011
$3600100100
%3700100101
&3800100110
'3900100111
(4000101000
)4100101001
*4200101010
+4300101011
,4400101100
-4500101101
.4600101110
/4700101111
04800110000
14900110001
25000110010
35100110011
45200110100
55300110101
65400110110
75500110111
85600111000
95700111001
:5800111010
;5900111011
<6000111100
=6100111101
>6200111110
?6300111111
@6401000000
A6501000001
B6601000010
C6701000011
D6801000100
E6901000101
F7001000110
G7101000111
H7201001000
I7301001001
J7401001010
K7501001011
L7601001100
M7701001101
N7801001110
O7901001111
P8001010000
Q8101010001
R8201010010
S8301010011
T8401010100
U8501010101
ZeichenDezimalBinär
V8601010110
W8701010111
X8801011000
Y8901011001
Z9001011010
[9101011011
\9201011100
]9301011101
^9401011110
_9501011111
`9601100000
a9701100001
b9801100010
c9901100011
d10001100100
e10101100101
f10201100110
g10301100111
h10401101000
i10501101001
j10601101010
k10701101011
l10801101100
m10901101101
n11001101110
o11101101111
p11201110000
q11301110001
r11401110010
s11501110011
t11601110100
u11701110101
v11801110110
w11901110111
x12001111000
y12101111001
z12201111010
{12301111011
|12401111100
}12501111101
~12601111110
12701111111
€12810000000
12910000001
‚13010000010
ƒ13110000011
„13210000100
…13310000101
†13410000110
‡13510000111
ˆ13610001000
‰13710001001
Š13810001010
‹13910001011
Œ14010001100
14110001101
14210001110
14310001111
14410010000
‘14510010001
’14610010010
“14710010011
”14810010100
•14910010101
–15010010110
—15110010111
˜15210011000
™15310011001
š15410011010
›15510011011
œ15610011100
15710011101
15810011110
Ÿ15910011111
16010100000
¡16110100001
¢16210100010
£16310100011
¤16410100100
¥16510100101
¦16610100110
§16710100111
¨16810101000
©16910101001
ª17010101010
ZeichenDezimalBinär
«17110101011
¬17210101100
17310101101
®17410101110
¯17510101111
°17610110000
±17710110001
²17810110010
³17910110011
´18010110100
µ18110110101
18210110110
·18310110111
¸18410111000
¹18510111001
º18610111010
»18710111011
¼18810111100
½18910111101
¾19010111110
¿19110111111
À19211000000
Á19311000001
Â19411000010
Ã19511000011
Ä19611000100
Å19711000101
Æ19811000110
Ç19911000111
È20011001000
É20111001001
Ê20211001010
Ë20311001011
Ì20411001100
Í20511001101
Î20611001110
Ï20711001111
Ð20811010000
Ñ20911010001
Ò21011010010
Ó21111010011
Ô21211010100
Õ21311010101
Ö21411010110
×21511010111
Ø21611011000
Ù21711011001
Ú21811011010
Û21911011011
Ü22011011100
Ý22111011101
Þ22211011110
ß22311011111
à22411100000
á22511100001
â22611100010
ã22711100011
ä22811100100
å22911100101
æ23011100110
ç23111100111
è23211101000
é23311101001
ê23411101010
ë23511101011
ì23611101100
í23711101101
î23811101110
ï23911101111
ð24011110000
ñ24111110001
ò24211110010
ó24311110011
ô24411110100
õ24511110101
ö24611110110
÷24711110111
ø24811111000
ù24911111001
ú25011111010
û25111111011
ü25211111100
ý25311111101
þ25411111110
ÿ25511111111

Python

Auch in Python werden im Hintergrund Zahlen für Buchstaben und Binärcodes für Dezimalzahlen verwendet. In Python lässt sich die sog. Ordnungszahl eines Buchstabens mit der Funktion ord einfach in Erfahrung bringen.

ord(<Buchstabe>)

Die sogenannte Ordnungszahl für einen (einzelnen!) Buchstaben kann mit dem Befehl ord bestimmt werden.

ord_A = ord('A')
ord_a = ord('a')
print('Ordnungszahl A:', ord_A)
print('Ordnungszahl a:', ord_a)

bin(<Zahl>)

Eine Dezimalzahl kann in eine Binär-Zahl umgewandelt werden.

binaer = bin(65)
print(binaer)
Hinweis

Mit dem 0b zu Beginn zeigt Python an, dass es sich um eine Binärzahl handelt. Analog zu der Subskript-Schreibweise 100000121000001_2 schreibt Python 0b1000001.

int(<Binärzahl>), int(<BinärZahl>, 2)

Der Befehl int (Abkürzung für Integer, also Ganze Zahl) kann eine Binärzahl in eine Dezimalzahl übersetzen. Dabei gibt es mehrere Möglichkeiten:

zahl = int(0b1001) # das 0b zeigt Python, dass es sich um eine binäre Zahl handelt
print('1001 binär = ', zahl)

# Achtung! folgende Umwandlung klappt nicht, da jetzt ein Text übergeben wird:
# zahl = int('0b1001')

# oder man teilt Python explizit mit, dass es sich um die Basis 2 handelt
zahl2 = int('1011', 2)
print('1011 binär = ', zahl2)
Hinweis

Der zweite Parameter gibt die Basis des Zahlensystems an, hier also für Binär 2.

chr(<Zahl>)

Gibt den zu einer Ordnungszahl gehörenden Buchstaben zurück.

buchstabe = chr(77)
print(buchstabe)
Name->Bin
  1. Ändern Sie das Programm unten so ab, dass Ihr Name ausgegeben wird.

print(bin(ord('R')))
print(bin(ord('e')))
print(bin(ord('t')))
print(bin(ord('o')))
  1. Beschreiben Sie, was genau auf der ersten Zeile passiert. In welcher Reihenfolge werden die drei Befehle print, bin und ord ausgeführt und welche Ergebnisse liefern sie jeweils?

Bin->Name
  1. Ändern Sie das Programm unten so ab, dass Ihr Name aus dem Binären wieder in Text umgewandelt wird.

print(chr(int('1010010', 2)))
print(chr(int('1100101', 2)))
print(chr(int('1110100', 2)))
print(chr(int('1101111', 2)))
  1. Beschreiben Sie, was genau auf der ersten Zeile passiert. In welcher Reihenfolge werden die drei Befehle print, chr und int ausgeführt und welche Ergebnisse liefern sie jeweils?

Binärer Codierer

Aufgabe

Schreiben Sie einen binären Codierer, welcher einen Text ins binäre übersetzt. Im vorgegebenen Code sehen Sie, wie über jeden Buchstaben eines Wortes iteriert werden kann.

for buchstabe in 'Hallo':
print(buchstabe)

Aufhübschen:

  1. Das 0b kann weggeschnitten werden, indem nur die Buchstaben nach dem zweiten Buchstaben verwendet werden:

    binaer = bin(11) # = 0b1011
    binaer = binaer[2:] # alles (:) nach dem zweiten Buchstaben wird verwendet
    print(binaer)
  2. Jeder Buchstabe soll genau 1 Byte, also 8 Zeichen, umfassen. Dies erreicht man, wenn man mit Nullen (engl. Zeros) auffüllt:

    binaer = '1011'
    binaer = binaer.zfill(8)
    print(binaer)
  3. Statt immer eine neue Zeile zu verwenden, kann der print-Befehl auch angewiesen werden, am Ende ein Leerschlag einzufügen:

    for buchstabe in 'Hallo':
    print(buchstabe, end=' ')
SSR