Zur Haupt­na­vi­ga­ti­on sprin­gen [Alt]+[0] Zum Sei­ten­in­halt sprin­gen [Alt]+[1]

Text­dar­stel­lung

Ein­füh­rung

Da ein Com­pu­ter alle In­hal­te le­dig­lich mit Zah­len dar­stel­len kann, ist es nötig, eine Zu­ord­nung zwi­schen Zah­len und Zei­chen her­zu­stel­len.

Die gän­gigs­ten Ver­fah­ren ar­bei­ten hier mit einer Co­die­rung auf Zei­chen­ba­sis, so dass ein­zel­nen Zei­chen eine in­di­vi­du­el­le Co­die­rung zu­ge­ord­net wird. Sol­che Zu­ord­nungs­ta­bel­len nennt man auch Zei­chen­satz­ta­bel­le oder C Code­page.

An­de­re Co­die­rungs­ar­ten ord­nen bei­spiels­wei­se nicht einem ein­zel­nes Zei­chen, son­dern gan­zen Zei­chen­kom­bi­na­tio­nen, Wör­tern und Sät­zen einen Ein­trag in einer Zu­ord­nungs­ta­bel­le zu. Ein sol­ches so­ge­nann­tes Wör­ter­buch­ver­fah­ren ist bei­spiels­wei­se das wei­ter unten vor­ge­stell­te LZW-Ver­fah­ren.

Die wohl be­kann­tes­te Code­page ist die ASCII-Ta­bel­le, diese um­fasst 128 Zei­chen. Um län­der­spe­zi­fi­sche Zei­chen zu co­die­ren wur­den auch an­de­re Code­pages de­fi­niert, die aber auf­grund der Kom­pa­ti­bi­li­tät die ers­ten 128 Zei­chen aus der ASCII-Co­die­rung über­nom­men und für die An­pas­sun­gen le­dig­lich die hin­te­ren 128 Plät­ze be­nutzt haben. Diese Zei­chen­satz­ta­bel­len wur­den zur Iden­ti­fi­ka­ti­on num­me­riert.

Tabelle nach ISO-8859-1

Bild­quel­le: Ta­bel­le nach ISO-8859-1 von ZPG In­for­ma­tik [CC BY-SA 4.0 DE], aus 1_hin­ter­grund.odt, be­ar­bei­tet

Haupt­säch­lich be­nutzt wurde hier­bei die Code­page 850 – bes­ser be­kannt als DOS-Latin-1. Da­ne­ben ent­wi­ckel­te die ISO die Norm 8859 mit 15 ver­schie­de­nen Code­pages.5

In den ers­ten 128 Zei­chen ent­spre­chen sie der ASCII-Ta­bel­le, die wei­te­ren Zei­chen bis Num­mer 160 sind nicht­druck­ba­re Steu­er­zei­chen. Die­ser Be­reich ist bei allen die­sen Code­pages iden­tisch. Diese Steu­er­zei­chen gehen zu­meist noch auf die ana­lo­ge Schreib­ma­schi­ne zu­rück. Bei der „Über­set­zung“ von Schreib­ma­schi­ne in eine di­gi­ta­le Ein­ga­be wur­den dabei für sämt­li­che Tas­ten ein „Zei­chen“ de­fi­niert. So hat bei­spiels­wei­se der Back­space das Steu­er­zei­chen 8.

Die un­ter­schied­li­che Ver­wen­dung des Blocks für Zei­chen ab Index 161 sorg­te dafür, dass beim Aus­tausch von Do­ku­men­ten in ver­schie­de­nen Ge­bie­ten – ins­be­son­de­re z.B. bei der An­zei­ge im In­ter­net – dazu, dass Son­der­zei­chen falsch dar­ge­stellt wur­den, wenn der fal­sche oder gar kein Zei­chen­satz an­ge­ge­ben wurde.

Bei­spiel: Der Um­laut „ö“ wurde in ver­schie­de­nen Code­pages mit dem Index 246 iden­ti­fi­ziert. Wurde eine Web­sei­te ohne An­ga­be der rich­ti­gen Code­page bei­spiels­wei­se in Grie­chen­land auf­ge­ru­fen, wurde dort au­to­ma­tisch die grie­chi­sche Code­page (ISO-8859-7) an­ge­nom­men. In die­ser steht an der Stel­le 246 das φ . Somit er­schien auf sol­chen Web­sei­ten dann „Dφner“.

Uni­code und Bi­ter­wei­te­rung

Im All­tag kam es mit Code­pages immer wie­der zu oben ge­schil­der­ten Pro­ble­men und des wei­te­ren gibt es auch Spra­chen, die nicht mit 256 Zei­chen aus­kom­men, da diese nicht al­pha­be­tisch son­dern laut­ba­siert auf­ge­baut sind. Al­lei­ne der chi­ne­si­sche Schrift­satz um­fasst ins­ge­samt über 100000 Zei­chen, von denen im­mer­hin ca. 5000 ge­bräuch­lich sind.

Um die­sen Spra­chen ge­recht zu wer­den, wurde be­reits 1988 ein uni­ver­sel­ler Zei­chen­satz vor­ge­schla­gen, der alle welt­weit ge­bräuch­li­chen Zei­chen be­inhal­tet. Die erste Ver­si­on von Uni­code wurde 1991 ver­öf­fent­licht, mit der Ver­si­on 2 aus dem Jahr 1996 wurde die An­zahl der Zei­chen auf die heu­ti­ge Größe von ma­xi­mal 1.114.112 er­wei­tert6.

Mul­ti­by­te Zei­chen­co­die­rung, UTF-8

4 Byte sind je­doch für die al­ler­meis­ten Zei­chen nicht not­wen­dig. Um nun nicht für jedes Zei­chen 4 Bytes „ver­schwen­den“ zu müs­sen, wird in der Regel für die Dar­stel­lung der Uni­code-Zei­chen eine so­ge­nann­te Mul­ti­by­te-Zei­chen­co­die­rung ver­wen­det. Hier­bei er­gibt sich aus der Co­die­rung selbst, wie viele Bytes für ein Zei­chen ver­wen­det wer­den.

Am ge­bräuch­lichs­ten ist hier­bei die UTF-8-Co­die­rung, bei die­ser exis­tie­ren 4 Be­rei­che:

Uni­code-Be­reich UTF-8-Co­die­rung (binär) An­zahl der co­dier­ba­ren Zei­chen
0000 0000 - 0000 007F 0xxxxxxx 27 128
0000 0080 - 0000 07FF 110xxxxx 10xxxxxx 211 − 27 1920
0000 0800 - 0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx 216 − 211 63488
0001 0000 - 0010 FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 220 1048576
Ge­samt: 1114112

Das erste Bit gibt an, ob es sich bei dem Zei­chen um ein Zei­chen mit einem Byte (ers­tes Bit = 0), oder meh­re­ren Bytes (ers­tes Bit = 1) han­delt. Bei einem Zei­chen mit nur einem Byte ent­spricht die Zei­chen­co­die­rung dem ASCII-Code.

Bei Zei­chen mit meh­re­ren Bytes ent­spricht die An­zahl der füh­ren­den 1en der An­zahl der Bytes des kom­plet­ten Zei­chens. Alle Nach­fol­ge­by­tes be­gin­nen mit der Bit­fol­ge 10.

Theo­re­tisch kann man so je­doch Zei­chen auf un­ter­schied­li­che Art dar­stel­len. Bei­spiel­wei­se lässt sich ein „a“ – nach ASCII-code mit den 7 Bit 1100001 co­diert – u.a. mit fol­gen­den Bit­codes aus­drü­cken:

  • mit einem Byte: 01100001
  • mit zwei Bytes: 11000001 10100001
  • mit drei Bytes: 11100000 10000001 10100001

Un­ter­stri­chen sind dabei die Steu­er­bits, der ei­gent­li­che Buch­sta­be „a“ ist fett mar­kiert.

Theo­re­tisch sind diese Dar­stel­lun­gen zwar eben­falls gül­tig, je­doch muss nach De­fi­ni­ti­on die kür­zes­te ver­wen­de­te Form ver­wen­det wer­den. Da je­doch alle diese Co­die­run­gen das selbe Zei­chen be­schrei­ben, muss man bei der ma­xi­ma­len An­zahl der co­dier­ba­ren Zei­chen diese „kürz­ba­ren“ Mög­lich­kei­ten ab­zie­hen.

An­mer­kung: Eben­falls nach De­fi­ni­ti­on der UTF-8-Co­die­rung kann ein 4 Byte gro­ßes Zei­chen im ers­ten Byte nur mit 11110000 bis 11110100 be­gin­nen. Zei­chen dar­über sind un­zu­läs­sig.

Mit­hil­fe die­ser Co­die­rung lie­ßen sich theo­re­tisch bis zu 8 Byte große Blö­cke dar­stel­len. Das erste Byte be­stün­de dann aus 11111111, die 7 Fol­ge­by­tes be­gin­nen mit 01. Somit blie­ben in 7 Bytes je­weils 6 Nutz­bits für die Daten, es lie­ßen sich also 242=4.​398.​046.​511.104 Zei­chen dar­stel­len. UTF-8 ist je­doch nur für ma­xi­mal 4 Bytes de­fi­niert.

 

5 Für wei­te­re In­for­ma­tio­nen und die Un­ter­schei­dun­gen: https://​de.​wi­ki­pe­dia.​org/​wiki/​ISO_​8859

6 32 Bit, ab­züg­lich ei­ni­ger Steu­er­bits und Steu­er­zei­chen.

 

Hin­ter­grund­in­for­ma­tio­nen: Her­un­ter­la­den [odt][1 MB]

 

Wei­ter zu Kom­pres­si­on