Unicode und UTF-8

Transcription

Unicode und UTF-8
Unicode und UTF-8
Anna-Katharina Wurst
28. April 2015
WP5 Angewandte Programmierung
David Kaumanns & Sebastian Ebert
SoSe 2015
CIS
Ludwig-Maximilians-Universität München
Unicode und UTF-8
Anna-Katharina Wurst
Inhalt
1
Zeichensätze
ASCII
ISO 8859-x
Unicode
2
Kodierung
UTF-8
3
Anwendung
PERL
2
Unicode und UTF-8
Anna-Katharina Wurst
Inhalt
1
Zeichensätze
ASCII
ISO 8859-x
Unicode
2
Kodierung
UTF-8
3
Anwendung
PERL
3
ASCII-Kodierung
American Standard Code for Information Interchange
1963 als Zeichensatz-Standard veröffentlicht
Unicode und UTF-8
Anna-Katharina Wurst
7 Bit Zeichen-Kodierung
definiert 128 Zeichen: 33 Steuerzeichen und 95 druckbare
Zeichen: (ASCII-Tabelle)
!#"$%&’()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNO
PQRSTUVWXYZ[\]^_ ‘abcdefghijklmnopqrstuvwxyz{ | } ~
A (dezimal): 65
A (binär): 100 0001
a (dezimal): 97
a (binär): 110 0001
4
ISO 8859-x
verschiedene Erweiterungen von ASCII auf einen 8-Bit-Code
Unicode und UTF-8
Anna-Katharina Wurst
z.B. ISO 8859-1 (ISO Latin-1) für Westeuropa
z.B. ISO 8859-2 (ISO Latin-2) für Mitteleuropa
zusätzliche Kodierungen von sprachspezifischen Zeichen
(z.B. Umlaute)
Probleme bei internationaler Kommunikation durch die
inkompatiblen Kodierungssysteme
5
Unicode
Unicode und UTF-8
Anna-Katharina Wurst
internationaler Zeichensatz-Standard, in dem für jedes
Schriftzeichen der Welt ein digitaler Codepoint festgelegt wird
die inkompatiblen Kodierungen verschiedener Zeichensätze
sollen beseitigt werden
Kodierung durch
UTF-32 (32 Bit pro Zeichen),
UTF-16 (16 oder 32 Bit pro Zeichen) oder
UTF-8 (8, 16, 24, 32 Bit pro Zeichen)
6
Unicode und UTF-8
Anna-Katharina Wurst
Inhalt
1
Zeichensätze
ASCII
ISO 8859-x
Unicode
2
Kodierung
UTF-8
3
Anwendung
PERL
7
UTF-8
Unicode und UTF-8
Anna-Katharina Wurst
Abkürzung für 8-Bit UCS Transformation Format
(UCS = Universal Character Set = Unicode)
Einführung 1992 durch Ken Thompson und Rob Pike
Kodierungsalgorithmus für Unicode-Zeichen
Multi-Byte-Zeichenkodierung (MBCS) mit variablen
Bytelängen
8
Unicode und UTF-8
Anna-Katharina Wurst
UTF-8-Zeichenkodierung
jedem Unicode-Zeichen wird eine speziell kodierte
Zeichenkette variabler Länge zugeordnet
zugelassen sind Bytefolgen bis zu einer Länge von 4 Bytes,
auf die sich alle Unicode-Zeichen abbilden lassen
ein Start-Byte, bis zu drei Folge-Bytes
9
UTF-8-Zeichenkodierung
Unicode und UTF-8
Anna-Katharina Wurst
Unicode in UTF-8 ist in den ersten 128 Zeichen identisch mit
ASCII
(1-Byte-Zeichen, höchstes Bit ist 0)
Unicode-Bereich (hexadezimal): 0000 0000 ... 0000 007F
UTF-8-Kodierung (binär): 0xxxxxxx
A (ASCII, UTF-8): 01000001
deutsche Umlaute brauchen 2 Bytes
ä (Unicode, hexadezimal): 0000 00E4
ä (UTF-8, binär): 11000011 10100100
kyrillische und fernöstliche Sprachen belegen bis zu 4 Bytes
je Zeichen
10
UTF-8-Algorithmus
ein Start-Byte, bis zu drei Folge-Bytes
Start-Bytes beginnen mit 0 oder 11, Folge-Bytes immer mit
10
Unicode und UTF-8
Anna-Katharina Wurst
Ist das höchste Bit des ersten Bytes 0, handelt es sich um
ein ASCII-Zeichen.
A (ASCII, UTF-8): 01000001
Ist das höchste Bit des ersten Bytes 1, handelt es sich um
ein Mehrbytezeichen.
ä (UTF-8, binär): 11000011 10100100
Bei den Startbytes gibt die Anzahl der 1-Bits die gesamte
Bytezahl des Mehrbyte-Zeichens an.
110xxxxx 10xxxxxx
1110xxxx 10xxxxxx 10xxxxxx
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
11
Vorteile und Nachteile
Vorteile
Unicode und UTF-8
Anna-Katharina Wurst
kein größerer Speicherbedarf für englische Texte
Bytestrom ist in beiden Richtungen bzw. auch in der Mitte
lesbar (im Gegensatz zu anderen MBCS), da Start- und
Folgebytes eindeutig unterscheidbar sind
Kodierungs-Reserve vorhanden
Nachteile
notwendige Analyse jedes Bytes (im Vergleich zu
Zeichenkodierungen mit fester Byteanzahl)
mehr Rechenaufwand und für bestimmte Sprachen u.U.
mehr Speicherplatz
12
Unicode und UTF-8
Anna-Katharina Wurst
Inhalt
1
Zeichensätze
ASCII
ISO 8859-x
Unicode
2
Kodierung
UTF-8
3
Anwendung
PERL
13
Terminal
Befehl $
locale
zeigt die aktuellen locale-Einstellungen
Unicode und UTF-8
Anna-Katharina Wurst
LANG=de_DE.UTF-8
LANGUAGE=de_DE
...
LC_ALL=
Variable LC_ALL legt Kodierung für alle
Umgebungsvariablen (bis auf LANGUAGE) fest
Befehl $
locale -a
zeigt die aktuell verfügbaren locales an
vorher: $ date –> Mi 22. Apr 18:00:18 CEST 2015
Befehl export LC_TIME=en_GB.utf8 ändert Umgebungsvariable
nachher: $ date –> Wed Apr 22 18:04:19 CEST 2015
Befehl sudo
locale-gen fr_FR.UTF-8
fügt neue Locales hinzu
14
Perl
Unicode und UTF-8
Anna-Katharina Wurst
Operationen in Perl unterscheiden zwischen Strings als Text
(z.B. bei substr und regulären Ausdrücken) und Strings als
Binärdaten (bei print und Filehandles).
PERLs default-Einstellungen passen eigentlich,
aber „best practice“ ist „always encode and decode at the
edges of your program“
Text, den ein Perl-Programm einliest, sollte explizit dekodiert
werden.
Text, den ein Perl-Programm ausgibt, sollte explizit kodiert
werden.
15
Perl Ausgabe
Warnmeldung bei Sonderzeichen:
Unicode und UTF-8
Anna-Katharina Wurst
Wide character in print at Perl-Programm.plx line 21.
um die Warnung zu verhindern, Kodierung für STDOUT auf
UTF-8 setzen:
binmode (STDOUT, ":encoding(utf8)");
dann muss aber auch die UTF-8 Kodierung und Dekodierung
für Filehandles entsprechend festgelegt werden (nächste
Folie) sowie die UTF-8-Kodierung des Programmtextes im
Header:
use utf8;
16
Perl Filehandle
Dekodieren:
# UTF-8 Dekodierung für Input-Filestream:
open (my $in_file, "<:encoding(utf8)", $filename);
Unicode und UTF-8
Anna-Katharina Wurst
oder:
# Input-Filestream erstellen
open(my $in_file, "<", $filename);
# UTF-8-Dekodierung
binmode($in_file, ":encoding(utf8)");
Kodieren:
# UTF-8-Kodierung für Output-Filestream
open (my $out_file, ">:encoding(utf8)", $filename);
oder:
open(my $out_file, ">", $filename);
binmode($out_file, ":encoding(utf8)");
17
Perl Sortierung
Unicode und UTF-8
Anna-Katharina Wurst
my @woerter = ("aber", "beta", "ähnlich", "arthur");
my @sort_woerter = sort (@woerter);
print "@sort_woerter \n";
Ausgabe per default:
aber arthur beta ähnlich
deutsche Sortierung mit: use
locale;
aber ähnlich arthur beta
18
Zusammenfassung
ASCII und Unicode sind Zeichensätze
Unicode legt für jedes Schriftzeichen einen Codepoint fest
Unicode und UTF-8
Anna-Katharina Wurst
mit UTF-8 kann Unicode kodiert werden
UTF-8 ist eine Multi-Byte-Zeichenkodierung mit variablen
Bytelängen
Start-Byte und Folge-Bytes pro Zeichen
bei der Anwendung Umgebungsvariablen und Locales
anpassen
explizites Dekodieren und Kodieren
19
Quellen und Literatur
Gumm, Heinz P. & Manfred Sommer: Einführung in die
Informatik. München: Oldenbourg 2006. (Kapitel 1.3
Informationsdarstellung)
Unicode und UTF-8
Anna-Katharina Wurst
http://www.joelonsoftware.com/articles/Unicode.html
http://www.perl.com/pub/2012/05/perlunicook-make-file-iodefault-to-utf-8.html
http://en.wikibooks.org/wiki/Perl_Programming/Unicode_
UTF-8
http://www.utf8-zeichentabelle.de/ (Unicode-Zeichennamen
und verschiedene Darstellungsformate für UTF-8-Codierung)
https://www.youtube.com/watch?v=MijmeoH9LT4
20

Documents pareils