Dieser Begleiter beschreibt Pass away verschiedenen Zeichenkodierungen, entsprechend welche zugeknallt Problemen auslosen im Stande sein, oder hinsichtlich man sie in Perl-Programmen triftig berucksichtigt.
Zusammenstellung
Jedweder hat es durchaus min. ehemals erlebt: Ein Sender, Dies bei Liedtext arbeitet, funktioniert unglaublich, dieweil man keine Umlaute eingibt. Alternativ kommt ausschlie?lich noch Zeichenmull hervor oder das solange bis zwei auf keinen fall akribisch dargestellte Symbol fur Umlaut.
ASCII
Um zu verstehen, Wieso eres dafur kommt, soll man einander besichtigen, wie gleichfalls „normaler” Lyrics & entsprechend Umlaute binar abgespeichert werden sollen.
Angefangen hat eres 1963 mit ASCII, dem Direktive, der 128 Vorzeichen jemals eine Zahl von 0 erst wenn 127 zuweist, die bei 7 bit kodiert werden sollen beherrschen.
Festgesetzt werden Welche Zahlenwerte z. Hd. lateinische Buchstaben, Ziffern, Satzzeichen weiters Kontrollzeichen genau so wie „Carriage Return” weiters „Line Feed”, also Zeilenumbruche.
Vorzeichen, Wafer im Joch eines Amerikaners Nichtens Verwendung finden, genau so wie Wafer deutschen Umlaute, kyrillische Vorzeichen Unter anderem vieles noch mehr, wurden ausser Seitenschlag behabig.
Weil Der Byte nicht mehr da 8 Bits besteht, ist und bleibt bei ASCII das erste, „most significant” Bit ohne Ausnahme 0.
Zusatzliche Zeichenkodierungen
Alabama man in Europa anfing Blechidiot drauf benutzen, mussten expire benotigten Zeichen irgendwie im Datenverarbeitungsanlage gespeichert werden Unter anderem dabei benutzte man Perish verbleibenden 128 Signal fur jedes Byte. Auf diese weise entstanden die Kodierungen Latin-1 fur den westeuropaischen Raum, Latin-2 je Mitteleuropa et cetera, zweite Geige aka ISO-8859-1 oder ISO-8859-2.
Ebendiese Zeichensatze Klavierauszug Bei den ersten 128 Symbol Mittels ASCII uberein, Perish zweiten 128 Zeichen, also Perish Mittels 1 wie erstem Bit, anders sein sich jeweils untereinander.
Welche saumen der Zeichensatze seien einem geradlinig unter Zuhilfenahme von eines uberhaupt nicht dass alten Beispieles wahrhaftig: anhand Ein Einleitung des Euros hatten etliche Lander die neue Geld und dadurch ein Wahrungssymbol, Dies zigeunern gar nicht within den traditionellen Zeichensatzen auspressen lie russiancupid?! (Jenes Angelegenheit wurde durch das Einfuhren des Zeichensatzes ISO-8859-15 behoben, einer umherwandern ausschlie?lich ein kleines bisschen von Latin-1 unterscheidet Unter anderem dasjenige € -Zeichen enthalt).
Unicode
Welche bisherigen Zeichenkodierungen konnten jeweils alleinig diesseitigen kleinen, Schankwirtschaft sinnvollen Kategorie aller moglicher Symbol darstellen – sowie man Texte mit gemischten Zeichensatzen verfassen wollte, ging unser heillose Chaos losgelost.
Um irgendwas Regelma?igkeit within welches Salat zugeknallt einsacken, hat Dies Unicode-Konsortium damit begonnen, jedem Vorzeichen, welches hinein irgend einer Skript As part of irgend verkrachte Existenz Sprechvermogen vorkommt, eine eindeutige, ganze Anzahl oder diesseitigen Namen zuzuordnen.
Expire Anzahl hei?t „Codepoint” weiters werde normalerweise wie vier- und sechsstellige, hexadezimale Vielheit in Ein Beschaffenheit U+0041 notiert; irgendeiner dazugehorige Titel ware LATIN SMALL SYMBOL A .
Neben Buchstaben & anderen „Basiszeichen” existiert sera untergeordnet Akzentuierungen wie den z. B. ACCENT, COMBINING ACUTE , expire auf den vorherigen Buchstaben angewandten Zungenschlag legen.
Sobald unter ein Basiszeichen ‘ne hervorhebung oder sonstige kombinierende Kurzel nachgehen, gestalten mehrer Codepoints ein logischen Buchstaben, das sogenanntes Grapheme.
Unicode Wandlung Formats
Pass away nach wie vor vorgestellten Unicode-Konzepte geschrieben stehen vollstandig ungeachtet alledem, wie gleichfalls Perish Unicode-Zeichen kodiert seien.
Hierfur wurden expire „Unicode Metamorphose Formats” definiert, Zeichenkodierungen, Perish aus moglichen Unicode-Zeichen visualisieren beherrschen. Dieser bekannteste Vertreter war UTF-8, welches fur jedes Perish bis jetzt vergebenen Codepoints 1 solange bis 4 Bytes benotigt.
Beilaufig in UTF-8 Partitur expire ersten 128 Signal bei denen durch ASCII uberein.
Von UTF-8 existiert dies zweite Geige eine laxe Variation, UTF8 offnende runde Klammerexklusive Mittestrich geschrieben), Perish nicht alleine mogliche Kodierungen zu Handen das Kurzel zulasst. Welches Perl-Modul Encode unterscheidet nachfolgende Varianten.
UTF-16 gegen nicht jungfraulich fur jedes Signal nicht alleine Byte, fur jedes immens hohe Unicode-Codepoints Anfang untergeordnet in diesem fall viel mehr Bytes gesucht.
UTF-32 kodiert jedes mogliche Symbol anhand vier Bytes.
Klammer aufDas Sigel As part of Ein letzten Zeile wird dasjenige Hangul-Zeichen fur jedes Perish Silbe SU, & wurde durch Ihrem Browser nur dargestellt, so lange Sie entsprechende asiatische Schriftarten installiert hatten.)
Had been werden „Charsets”Effizienz
Das Wort zeichensatz wurde bei zwei verschiedenen, bestimmte Aspekte widerspruchlichen Bedeutungen verwendet.
Parece kommt leer Mark Englischen, Ferner sei tatsachlich Gunstgewerblerin Abkurzung pro character set. Zusammenstellung ist Englisch fur jedes Haufen, sowie man dies Wort fur Wort nimmt ist also Der Repertoir von Kurzel gemeint, genau so wie Unicode eines definiert. Gewiss schranken zweite Geige Kodierungen wie ASCII oder Latin-1 den Zeichensatz das, stellen also neben Kodierungen nebensachlich Der Vorrat oder zeichensatz hier.
Im regelfall wurde zeichensatz nebensachlich einfach wanneer Ersatzwort je Zeichenkodierung gebraucht, wie gleichfalls z. B. Bei den HTTP-Headern, Wafer der Lange nach herunter wieder erwahnt seien.
Perl oder Zeichenkodierungen
Perl unterscheidet bei Operationen nach Strings nebst solchen, Wafer die Strings amyotrophic lateral sclerosis Lyrics studieren Klammer aufgenau so wie z.B. uc , lc und substr sobald regulare Ausdrucke), weiters sie, Wafer Strings wanneer Binardaten etwas unter die Lupe nehmen, wie gleichfalls zum Beispiel print Ferner Dies entschlusseln aufgebraucht Dateihandles.
Dadurch Perl zu Handen die Textoperationen Wafer Strings waschecht auslegen konnte, Auflage man Die Kunden dekodieren. Unser vermag man bei einem Ein Feature decode inside diesem Core-Modul Encode machen, oder bei den herab beschriebenen IO-Layern.
Andersrum Bedingung man Strings anhand Encode::encode kodieren, Damit binare Operationen entsprechend print auszufuhren.
Alle Textoperationen sollte man uff nur in Strings exportieren, Welche zuvor dekodiert wurden, denn als nachstes sekundar Nicht-ASCII-Zeichen zutreffend behandelt Ursprung: lc Ferner uc arbeiten naturlicherweise, Ferner \w hinein regularen ausquetschen passt in jeden Buchstaben, auch nach Umlaute, Buckel-S Ferner allen moglichen Zeichen in allen moglichen Sprachen, Perish vorhanden amyotrophic lateral sclerosis Einzelheit eines Wortes gemocht sind nun.
cmp vergleicht Nicht-ASCII-Zeichen allerdings nachdem Unicode-Codepoint, was Nichtens immer unser war, was man z.B. in deutschem Songtext in der Regel. Alleinig Falls use locale angeschaltet ist und bleibt, seien sprachspezifische Vergleichsregeln gebraucht. Denn dasjenige benehmen bei sort durch cmp definiert ist und bleibt, gilt Fail nebensachlich je das Sortieren von Listen.
Eres empfiehlt sich, alle Eingaben unmittelbar drogenberauscht entziffern, nachher bei folgenden Strings bekifft werken, weiters sie erst bei der Abdruck Klammer aufoder beim SpeichernKlammer zu zum wiederholten Mal hinein Bytestrings drogenberauscht kodieren. So lange man sich auf keinen fall an ebendiese Regelblutung halt, verliert man im Softwaresystem geradlinig den Syllabus jener Zeichenfolge ein bereits dekodiert wurde und jener Nichtens.
Perl bietet Mittels den IO-Layern Mechanismen, durch denen man das kodieren & dekodieren an Dateihandles und verallgemeinernd an allen Handles in die Praxis umsetzen Moglichkeit schaffen kann.
Vorsichtig sollte man den Eintrag Layer :utf8 Gefallen finden an, der annimmt, weil expire Eingabedatei gultiges UTF-8 sei. Sollte sie das nicht werden (und man hat keine Anlass, Dies drogenberauscht durch Uberprufen Richtigkeit herausstellenKlammer zu, war unser die potentielle Vorkommen fur jedes Sicherheitslucken (siehe diesen Gebrauchsgut unter Perlmonks je Details).
Dasjenige Komponente & Pragma utf8 rechtens eres untergeordnet, Nicht-ASCII-Zeichen As part of Variablennamen bekifft einsetzen. As part of Namespaces und Modulenamen sollte man davon bedenken, denn es bestehend keineswegs ergeben funktioniert. Beilaufig sollte man durch die Bank beachten, weil gar nicht jedweder die Chance hat, irgendwelche Unicode-Zeichen mit einer Tastatur einzugeben.
Wafer Arbeitsumgebung versuchen
Ausgestattet Mittels folgendem verstehen darf man testen, ob unser Datenendgerat Ferner locales auf Wafer gleiche Kodierung eingestellt sind, & unter aus welchen:
Sowie man Jenes Programm in einem Sichtgerat ausfuhrt, werde einzig folgende Textzeile korrekt angezeigt seien, Wafer erste Kluft darin ist als nachstes Wafer Zeichenkodierung des Terminals.
Wie im Vorfeld gesagt war Dies Eurozeichen € auf keinen fall within Latin-1 bestehend, welches U sollte unteilbar Latin-1-Terminal ungeachtet waschecht angezeigt werden.
Within Windowsterminals seien nebensachlich expire Zeichenkodierungen cp850 oder cp858 Klammer aufWafer einzig von den neuesten Encode-Versionen unterstutzt wurdeKlammer zu ublich, Ein Uberrest Ein Betriebsumgebung nicht frisch Windows-1252 .
Damit den obigen Erprobung auf aufgebraucht inside Perl verfugbaren Zeichenkodierungen auszuweiten, konnte man expire Tabelle welcher Kodierungen durch Encode->encodings(‘:all’schlie?ende runde Klammer substituieren.