Wer deutsche Umlaute in seinen LaTeX-Dokumenten korrekt dargestellt haben möchte, sollte darauf achten, dass die TeX-Datei mit UTF-8 kodiert ist. Um mit LaTeX den UTF-8-Zeichensatz (und somit auch die deutschen Umlaute und weitere Sonderzeichen) zu benutzen, muss das Input Encoding mit folgender Deklaration auf UTF-8 gestellt werden:
\usepackage[utf8]{inputenc}
Alle kennen es, alle lieben es. Das ASCII-Herz. Gemeint ist damit dieses Herzchen-Symbol: ♥. Das Witzige ist aber, dass das Herz gar nicht in den 128 Zeichen der ASCII-Zeichentabelle vorkommt, sondern Zeichen Nummer 9829 im Unicode ist. In frühen Jahren hat man das aber in Internetforen falsch aufgeschnappt und die Herzen mit ASCII-Arts in Verbindung gebracht, weshalb noch immer viele nach dem Begriff “ASCII Herz” suchen.
Möchte man das Herz in einem HTML-Dokument mit UTF-8 Kodierung darstellen, so gibt es zwei Wege dafür. Einmal als Hex-Code: ♥ und einmal als Dezimal-Code: ♥.
Unter Windows kann man das Herz übrigens durch gleichzeitiges Drücken der Alt-Taste zusammen mit der Zahl 3 (auf dem Num-Block) einfügen. Ein weiterer Weg führt über die Windows Zeichentabelle (Start -> Ausführen -> charmap.exe):
Gegeben ist folgende ASCII-Codierung:
%7b%22email%22%3a%22bn%40bennyn.de%22%2c%22name%22%3a%22Benny%20Neugebauer%22%7d
Wie wir wissen, stellt der ASCII-Code genau 1 Byte (8 Bit) dar. Dazu wird eine Sequenz in der Form %xy angegeben, wobei “xy” eine zweistellige Hexadezimal-Zahl ist, welche die 8-Bit repräsentiert. Ein Blick in die ASCII-Tabelle zeigt uns folgende Kodierung:
%20 = blank (Leerzeichen)
%22 = "
%3a = :
%40 = @
%2c = ,
%7b = {
%7d = }Demnach müsste für unser Beispiel der entsprechende Unicode (UTF-8) so aussehen:
{"email":"bn@bennyn.de","name":"Benny Neugebauer"}In Java lässt sich ASCII-Code in Unicode ganz leicht umwandeln:
1 2 3 | String ascii = "%7b%22email%22%3a%22bn%40bennyn.de%22%2c%22name%22%3a%22Benny%20Neugebauer%22%7d"; String unicode = URLDecoder.decode(ascii, "UTF-8"); System.out.println(unicode); |
Beim Parsen einer UTF-8 XML-Datei mit JDOM bekam ich eine MalformedByteSequenceException: Invalid byte 2 of 3-byte UTF-8 sequence. Obwohl die Codierung richtig war, musste ich im Header der Datei die folgende Zeile ersetzen:
<?xml version = "1.0" encoding = "UTF-8" ?>Undzwar gegen diese:
<?xml version = "1.0" encoding = "ISO-8859-1" ?>Wenn das Zend Framework folgende Meldung liefert: “Warning: Exception caught by form: Session must be started before any output has been sent to the browser“, dann kann das daran liegen, dass die Zeichensatzkodierung für den Controller, der diesen Fehler verursacht, nicht korrekt gesetzt ist.
Bei mir wurde dieser Fehler durch einen Controller ausgelöst, der mit “UTF-8″ kodiert war. Eine Änderung der Kodierung auf “UTF-8 ohne BOM” sorgte hier für wahre Wunder. Die Kodierung mit “ANSI” hat auch funktioniert.
Mit der Funktion header kann man in PHP den HTTP-Header eines Dokuments ändern. Das ist besonders sinnvoll, wenn man dem Browser Bilder ausliefern möchte und daher vermeiden will, dass der Browser das Bild als HTML-Seite interpretiert.
Beim Umgang mit header muss man darauf achten, dass vor dem Einsatz dieser Funktion keine HTML-Tags oder andere formatierte Ausgaben stattfinden. Außerdem dürfen sich vor (und nach!) der PHP-Einbindung keine Leerzeichen befinden.
Ein einfaches header-Beispiel ist:
<?php header("Content-type: image/jpeg") ?>
Selbst bei diesem Einzeiler kann es aber vorkommen, dass eine Warnung mit dem Text “Cannot modify header information – headers already sent by” ausgegeben wird. In diesem Fall ist die PHP-Datei in UTF-8-Codierung abgepeichert und enthält ein “Byte Order Mark” (kurz: BOM). Das BOM-Steuerzeichen wird von PHP falsch erkannt, weshalb man für diese Datei “UTF-8 ohne BOM” als Kodierung wählen muss.
Wie das geht, zeigt dieser Screenshot von Notepad++:



0