<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Lieber Linux &#187; Sprache</title>
	<atom:link href="http://www.lieber-linux.de/tag/sprache/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.lieber-linux.de</link>
	<description>Linux und Open Source Software im Blog</description>
	<lastBuildDate>Thu, 26 Jan 2012 17:58:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>Character Sets / Zeichen-Kodierung</title>
		<link>http://www.lieber-linux.de/2009/04/character-sets-zeichen-kodierung/</link>
		<comments>http://www.lieber-linux.de/2009/04/character-sets-zeichen-kodierung/#comments</comments>
		<pubDate>Sun, 19 Apr 2009 11:04:59 +0000</pubDate>
		<dc:creator>Nudge</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tipp]]></category>
		<category><![CDATA[ASCII]]></category>
		<category><![CDATA[gettext]]></category>
		<category><![CDATA[i18n]]></category>
		<category><![CDATA[Kodierung]]></category>
		<category><![CDATA[Konsole]]></category>
		<category><![CDATA[l10n]]></category>
		<category><![CDATA[Locale]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Sprache]]></category>
		<category><![CDATA[Terminal]]></category>
		<category><![CDATA[Unicode]]></category>

		<guid isPermaLink="false">http://www.lieber-linux.de/?p=432</guid>
		<description><![CDATA[Letzte Woche bin ich mit MySQL fast verzweifelt. Irgendwie haute die ganze Kodierung nicht mehr hin. Das Backup hatte auf einmal zerrissene Umlaute, und nichts konnte es bewegen, es wieder richtig zu stellen. Nach verzweifelter Suche fiel mir der Fehler auf: Terminal, Verbindung, MySQL &#8211; all das muss passen. Und da hatte sich der kleine [...]]]></description>
			<content:encoded><![CDATA[<p>Letzte Woche bin ich mit <strong>MySQL</strong> fast verzweifelt. Irgendwie haute die ganze Kodierung nicht mehr hin. Das Backup hatte auf einmal zerrissene Umlaute, und nichts konnte es bewegen, es wieder richtig zu stellen. Nach verzweifelter Suche fiel mir der Fehler auf: Terminal, Verbindung, MySQL &#8211; all das muss passen. Und da hatte sich der kleine Fehlerteufel eingeschlichen: <strong>WordPress</strong> hielt es nicht für nötig, die Tabellen auf die benutzte Kodierung umzustellen. Hier gleich die Entwarnung: Die aktuelle <strong>WordPress</strong>-Version 2.7.1 tut das auf jeden Fall ordentlich.</p>
<p>Auf jeden Fall hat es mich angespornt, zu diesem Thema einen kleinen Beitrag zu verfassen. Und so fange ich mit einem kurzen Abschweifer eines geschichtlichen Abrisses an, um dann später auf die Einstellung des Linux-Basissystems zu sprechen zu kommen. Weil damit schon so viel Text durch den Äther fliegt, kommt <strong>MySQL</strong> etwas später dran.</p>
<p><span id="more-432"></span></p>
<h3>Wildwuchs der Kodierungen</h3>
<p>Die richtige und konsistente <strong>Kodierung</strong> von Zeichenketten, das scheint ein Buch mit sieben Siegeln. Verursacht wurde das Chaos durch ein zugegebenermaßen kurzsichtiges 7bit-Denken unserer IT-Väter aus den Staaten, als die wenigen englischen Buchstaben ausreichend erschienen. Und jetzt haben wir den Salat: Dateisysteme, Datenbanken, Netzwerke, Webseiten &#8211; durch alle Instanzen zieht sich dieses leidige Thema. Seit Jahrzehnten, und jeder ist vom Schlamassel betroffen.</p>
<p>Nach der Einöde der 127 Zeichen ergriff die Welt der blanke Kodierungswahn. Mit dem Erfolgszug der Computer in alle Teile der Welt entstand der Bedarf, auch lokale Zeichen digital zu benutzen. Dabei erfand praktisch jede nationale Standardisierungsbehörde ein eigenes Zeichenset. Manche Behörden, wie Japan&#8217;s JIS (<em>Japan Information Standard</em>), erfanden über die Jahre sogar immer wieder neue Kodierungen &#8211; allein in Japan gibt es schon unbeherrschbar viele.</p>
<p>Vor allem die Beschränkung auf zunächst 1 Byte mit 8-Bit Breite pro <strong>Schriftzeichen</strong> führte zu einer Menge an Kodierungen. Hier siedelten die nationalen Zeichen alle im selben Wertebereich an. Man denke nur an die vielen europäischen Zeichensets! Durch diese Mehrfachverwendungen entstand an den Reibungsstellen mehr Schaden als Nutzen.</p>
<p>Klar, mehr als ein <strong>Byte</strong> pro Zeichen, das ist mit Aufwand verbunden. So muss man die Länge einer Zeichenkette zwischen Bytes und Schriftzeichen unterscheiden, Trennungen richtig durchführen. Daneben ist die Prüfung valider Eingaben viel komplizierter und anfälliger für Fehler &#8211; und damit auch für Sicherheitsrisiken. Bis vor wenigen Jahren war der Rechenaufwand (die <em>Performance</em>) um vieles wichtiger als die Unterstützung fremder Sprachen, die im eigenen Land unter &#8220;ferner liefen&#8221; ignoriert werden konnten.</p>
<p>Das rächte sich kurze Zeit später. Mit häßlichen Fragezeichen oder Vierecken in den Worten, fehlenden Akzenten, abgeschnittenen Sätzen oder allein den inkompatiblen Umbrüchen der verschiedenen Betriebssysteme holte uns die Vergangenheit grausam ein. Allen voran unsere Redmonder Freunde haben da ganze Arbeit geleistet und mit ihrer DOS- und (frühen) <strong>Windows</strong>-Welt ganz eigenbrödlerisches Handeln an den Tag gelegt, und die Nutzer baden es aus.</p>
<h3>Die Geburt von Unicode</h3>
<p>Um dem ganzen ein Ende zu bereiten, gründete sich 1991 das <strong>Unicode</strong> Consortium. Es hatte das Ziel, durch eine Schaffung einer einheitlichen Nummerierung aller auf der Welt benutzen Schriftzeichen das Wirrwarr zu entflechten. Diese Nummerierung ist der Unicode eines Zeichens. Damit Unicode sich durchsetzen kann, gibt es eine Garantie auf eine sogenannte <em>round-trip conversion</em>. Das heißt, bei einer &#8220;Übersetzung&#8221; eines nationales Zeichens auf Unicode und zurück soll wieder dasselbe Zeichen entstehen. Was vielleicht ganz einfach und logisch klingt, ist allerdings verdammt kompliziert. Diese Basis war wichtig, damit alle Systeme problemlos auf Unicode migrieren können.</p>
<p>OK, Kurs auf Unicode! Doch bis heute hat sich Unicode leider nicht richtig durchsetzen können. Das Problem bei der Verbreitung von Unicode sind die bestehenden Daten und Anwendungen, die mit mehr als einem Byte pro Zeichen nicht zurechtkommen. Eine Hauruck-Umstellung ist vollkommen unmöglich, man denke an die schiere Unzahl von Computern und Dokumenten in der Welt. Und eine schleichende Umstellung ist teuer. Denn jedes Stück Text muss gekennzeichnet werden. Welche Kodierung hat es? Welche Sortierung ist die richtige?</p>
<p>Daneben gibt es nicht nur ein Unicode: Es kommt ebenfalls mit verschiedenen Kodierungen daher. Diese sind gewissermaßen Umsetzungen des Unicode auf die verschiedene Bit-Breiten, mit denen Computer oder Netzwerke umgehen können: <strong>UCS-4</strong> und <strong>UCS-2</strong> für 32 bzw. 16 Bit, <strong>UTF-8</strong> und <strong>UTF-7</strong> für 8 bzw. 7 Bit. Dabei benutzen UCS-2 und UCS-4 feste Breiten von 2 bzw. 4 Byte pro ZeichenÂ  (das ist also doppelt oder 4mal sowie Platz wie bei DOS). Beispiele für UCS-2 sind Windows (ab Windows 2000) und Java. Wenn man dort Unicode-Dateien mit einem einfachen Texteditor öffnet, so sieht am am Anfang zwei Binärzeichen, die a) sagen, es ist UCS-2, und b) erklären, ob das niederwertige Byte zuerst oder zuletzt kommt &#8211; ein sogenanntes endianess mark.</p>
<p>Degegen steht UTF-* für <em>Unicode Transformation Format</em> und wurde für die Übertragung von Unicode über nicht-unicode-Systeme erfunden, ganz ähnlich einem IPv6-over-IPv4-Tunnel. UTF ist also als Datenstrom selbst in 7-Bit (UTF-7) bzw. 8-Bit (UTF-8) gehalten. EsÂ  benutzt dann zum Teil mehrere Zeichenkombinationen, um das gewünschte Unicode-Zeichen zu erklären. Der Vorteil: Die <strong>US-ASCII</strong>-Zeichen sind vollständig gleich zur ASCII-Kodierung. Dadurch sind praktisch alle alten Systeme, die nix von Zeichensätzen wissen, Unicode-kompatibel. Ein toller Trick also, und Amerika ist wieder fein raus. Soll der Rest der Welt sich um ihre komischen Hieroglyphen selbst kümmern! <img src='http://www.lieber-linux.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3>Der Perso für Textzeilen</h3>
<p>Unicode allein macht also nicht glücklich. Wir bräuchten den Personalausweis für Texte, um die Kodierung richtig zu verstehen. Meta-Daten für Text-Daten sind gefragt. Und ebenda stehen wir jetzt: Mit Unmengen von Einstellungen für Dateisysteme, Terminals, Shell-Kommandozeilen, GUI Toolkits und Webseiten, Fonts und Druckern mühen wir uns ab. Damit alles richtig zusammenspielt, und man am Ende das richtige Zeichen am Bildschirm sieht, ist ein konsequenter Umgang mit den Character Sets wichtig. Für den Programmierer oder Web-Designer bedeutet dies: Seine Dateien müssen in der richtigen Kodierung angelegt werden. Sein Dateisystem und sein Editor müssen damit umgehen können. Sein Webserver muss das Dokument richtig ausliefern, und der Browser muss es richtig interpretieren. Der Browser muss auch den richtigen Font laden und das richtige Zeichen rendern. Das klingt nach einer Menge Arbeit.</p>
<p>Glücklicherweise haben schon so viele Hände ins Uhrwerk gefasst, und ein paar Teile sind schon an Ort und Stelle. Vorausgesetzt, man installiert ein modernes Betriebssystem, so sind Browser, Font und Anzeige bereits funktionstüchtig. Linux-Distributionen aller Art haben nach der Jahrtausendwende fast standardmäßig eine Unicode-Umgebung in UTF-8 aktiviert. <strong>UTF-8</strong>, das kennen wir unter anderem von Google (!), ist dafür ein sehr gut geeigneter Zeichensatz. Zum einen kann es alle Unicode-Zeichen darstellen, zum anderen ist es fast vollständig kompatibel zu US-ASCII. Nur nicht-US-ASCII-Zeichen (127 und höher) werden aus mehrbytigen Ketten gebildet. Deutsche Umlaute aus zwei Zeichen (zum Beispiel das <em>&#8220;ä&#8221;</em> des ISO-8859-1 / latin1 aus <em>&#8220;Ã&#8221;</em> und <em>&#8220;¤&#8221;</em>), japanische Zeichen bereits aus drei Bytes.</p>
<p>Egal ob Unicode oder nicht, wir brauchen immer und überall die richtigen Daten plus deren dazu passenden <strong>Meta-Daten</strong>. Für <strong>Linux</strong>-Freunde bedeutet dies: Das <strong>Terminal</strong>, das wichtigste Element unseres Systems, muss auf die richtige Kodierung eingestellt sein. Sonst erstellen wir den Inhalt in einer völlig falschen Zeichensprache. Alternativ lassen sich natürlich Websites auch mit Klickiklackli-Editoren aufbereiten. Möchte man jedoch die volle Linux-Power mit <em>grep</em>, <em>sed</em>, <em>tail</em> und anderen Text-Tools nutzen, so ist die richtige Einstellung des Terminals Pflicht.</p>
<h3>Locales</h3>
<p>Doch halt, wir haben etwas vergessen: Es geht nicht nur im die Kodierung, es geht auch um Sprache. Es ist ja wohl ein Unterschied, ob ich sage &#8220;latin1&#8243;, und morgen verstehe ich nur noch Spanisch, oder ob auf die Meldungen auch in meiner gewünschten <strong>Sprache</strong> erscheinen. Wir brauchen also Sprache und Kodierung in einem. Und dies vereint die<strong> Locale</strong>. Sie vereint sogar noch die landesspezifische Version einer Sprache: Aufgebaut ist eine Locale-Angabe aus einer ISO-Sprachkennung, zwei kleinen Buchstaben wie <em>&#8220;de&#8221;</em>, <em>&#8220;en&#8221;</em> oder <em>&#8220;fr&#8221;</em>, gefolgt von einem Unterstrich und einer ISO-Landeskennung in zwei Großbuchstaben wie <em>&#8220;DE&#8221;</em>, <em>&#8220;US&#8221;</em> oder <em>&#8220;ES&#8221;</em> für Spanien. Danach folgt optional mit <em>&#8220;@&#8221;</em> oder <em>&#8220;.&#8221;</em> getrennt die gewünschte Kodierung.</p>
<p>Zum Beispiel ist <em>&#8220;en_US&#8221;</em> das amerikanische Englisch, <em>&#8220;en_GB&#8221;</em> das britische. Beides ließe sich in Latin1 (<em>&#8220;en_US.ISO-8859-1&#8243;</em> und <em>&#8220;en_GB.ISO-8859-1&#8243;</em>) wie auch in <strong>UTF-8</strong> (<em>&#8220;en_US.UTF-8&#8243;</em> und <em>&#8220;en_GB.UTF-8&#8243;</em>) benutzen. Stellt man nun auf dem Linux-System die richtige <strong>Locale</strong> ein, so werden alle Meldungen in der gewünschten Sprache und auch <strong>Kodierung</strong> ausgegeben. Hat man das Terminal auf dieselbe Kodierung gestellt, dann sollten sogar lesbare Zeichen erscheinen. <img src='http://www.lieber-linux.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<h3>Für Freunde der Übersetzung: Gettext</h3>
<p>Kennt Linux also alle Sprachen? Das ist wohl unmöglich, kein Programmierer der Welt kann das leisten. Doch viel besser &#8211; es ist ganz modular. Dabei wird Software auf Englisch erstellt, doch jeder Textausgabe wird gesagt: Achtung, du bist ersetzbar. Später wird jemand kommen, der dich eventuell austauscht, also mach dir es nicht zu gemütlich! Dieser Vorgang ist die <em>Internationalization</em>, auch <strong>i18n</strong> genannt.</p>
<p>Mit einem GNU-Tool namens <strong>gettext</strong> werden dann aus dem Programmtext die Ausgaben extrahiert und in eine Übersetzungsdatei mit der schönen Endung <em>*.po</em> geschrieben. Diese wird dann von Leuten aus aller Welt an die jeweilige Sprache angepasst.Â  Dies nennt man <em>Localization</em>, im Programmierjargon abgekürzt mit <strong>l10n</strong>. Diese werden getrennt vom eigentlichen Programm gepflegt. So muss man nur die Sprachpakete installieren, die man wirklich braucht. Das spart jede Menge Platz. Sprachpakete gibt es in Debian ohne Ende:</p>
<pre>nudge@linux:~&gt; apt-cache search l10n
iceweasel-l10n-af - Afrikaans Sprachpaket für Iceweasel
iceweasel-l10n-all - Alle Sprachpakete für Iceweasel (Meta)
iceweasel-l10n-ar - Arabisches Sprachpaket für Iceweasel
iceweasel-l10n-be - Weißrussisches Sprachpaket für Iceweasel
...</pre>
<p>Habe ich die richtige <strong>Locale</strong> aktiviert, lädt das Programm die entsprechende *.po-Datei (eigentlich eine davon abgeleitete, komprimierte Version auf <em>*.mo</em>), so gibt das Programm die Übersetzungen aus. Mit diesen Locales arbeitet das Linux-System auch auf der Basis von <strong>Kernel</strong>-Meldungen. Es kann also auf Spanisch sagen: &#8220;Login fehlgeschlagen&#8221;, wie auch immer das heißen würde. Auf japanisch sagt mir mein &#8220;su&#8221; mit falschem Passwort:</p>
<pre>nudge@linux:~&gt; su
Password:
su: èªè¨¼å¤±æ•—
nudge@linux:~&gt;</pre>
<p>Werd&#8217;s der Geier draus schlau! (Naja, euch kann ich es ja verraten. Es wird &#8220;ninshoo shippai&#8221; ausgesprochen und bedeutet soviel die &#8220;Fehler bei der Authentifizierung&#8221; &#8211; was sonst! <img src='http://www.lieber-linux.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> ). Wichtig dabei: Die Übersetzungen von Linux sind Übersetzungen der zugrundeliegenden C-Bibliothek, der <strong>glibc</strong>. Hat ein System gar keine Einstellungen erhalten, so heißt diese Grundeinstellung entsprechend &#8220;C&#8221;.</p>
<h3>Das Terminal auf die richtige Locale einstellen</h3>
<p>Also, wie bekomme ich nun raus, ob meine <strong>Konsole</strong> richtig eingestellt ist? Die derzeitige Sachlage ermittelt man einfach mit dem Kommando <em>locale</em> (wer hätte das gedacht? <img src='http://www.lieber-linux.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> ):</p>
<pre>nudge@linux:~$ locale
LANG=de_DE@euro
LANGUAGE=de_DE@euro
LC_CTYPE="de_DE@euro"
LC_NUMERIC="de_DE@euro"
LC_TIME="de_DE@euro"
LC_COLLATE="de_DE@euro"
LC_MONETARY="de_DE@euro"
LC_MESSAGES="de_DE@euro"
LC_PAPER="de_DE@euro"
LC_NAME="de_DE@euro"
LC_ADDRESS="de_DE@euro"
LC_TELEPHONE="de_DE@euro"
LC_MEASUREMENT="de_DE@euro"
LC_IDENTIFICATION="de_DE@euro"
LC_ALL=</pre>
<p>Das @euro ist ein Synonym für &#8220;.ISO-8859-15&#8243;, einen relativ jungen Latin1-Zeichensatz, wie ISO-8859-1, aber inclusive Euro-Symbol. Die Grundeinstellung des Systems findet man bei <strong>Debian</strong> oder <strong>Ubuntu</strong> in <em>/etc/default/locale</em>. Welche <strong>Zeichensätze</strong> sich dort einstellen lassen, könnt ihr mit <em>locale -a</em> herausfinden:</p>
<pre>nudge@linux:~$ locale -a
C
de_DE
de_DE@euro
de_DE.iso88591
de_DE.iso885915@euro
de_DE.utf8
deutsch
german
ja_JP
ja_JP.eucjp
ja_JP.ujis
ja_JP.utf8
japanese
japanese.euc
POSIX</pre>
<p>Da hätten wir auch <em>de_DE.utf8</em> für eine Umstellung auf Unicode. Achtung aber hier, die Angabe in LANG, LANGUAGE oder LC_ALL sollte dann als <strong>de_DE.UTF-8</strong> angegeben werden. Gerade diese Angaben macht leider jede Software anders &lt;stöhn&gt;.</p>
<h3>Was macht man, wenn eine Locale nicht verfügbar ist?</h3>
<p>Zunächst die Sprachausgabe von Linux (also seiner C-Bibliothek <strong>glibc</strong>) für diese Locale vorbereiten. Diese Bibliothek unterstützt nämlich so viele Sprachen und Zeichensätze, dass nicht alle diese Erweiterungen automatisch installiert werden. <strong>Debian</strong> oder <strong>Ubuntu</strong> installieren stattdessen Templates, wie die Meldungen in locale-Dateien generiert werden, die der Benutzer gern hätte (andere Distributionen machen dies ein wenig verschieden). Auf Wunsch auch gern zwei&#8230;oder drei&#8230;oder viele. Es ist also möglich, dass ein Benutzer auf deutsch arbeitet, während zeitgleich ein weiterer User am gleichen System auf indonesisch begrüßt wird! Na, das ist doch mal was! <img src='http://www.lieber-linux.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Die dafür von Debian/Ubuntu unterstützten <strong>Locales</strong> befinden sich in der Datei <em>/etc/locale.gen</em> aufgelistet. Früher waren hier nur die aktiven drin, jetzt sind mittlerweile alle aufgeführt und die aktiven als einige nicht auskommentiert. Man braucht also nun bloß nach der gewünschten <strong>Kodierung</strong> suchen, und entfernt das #-Zeichen am Anfang der Zeile. Denselben Effekt erreicht man übrigens mit dem Befehl</p>
<pre>dpkg-reconfigure locales</pre>
<p>Dieser führt die Auskommentierung ebenfalls durch und ruft danach das Programm <em>/usr/sbin/locale-gen</em> auf, welches die Datei <em>/etc/locale.gen</em> liest und für alle dort aktivierten Zeichnsätze das Programm <em>/usr/sbin/localedef</em> durchführt. localedef wiederum generiert aus Templates die <strong>locale</strong>-spezifischen Sprachausgaben der C-Bibliothek. Ändert man die Datei /etc/locale.gen zu Fuß, muss man locale-gen danach selbst aufrufen. Um bei <strong>Unicode</strong> zu bleiben: localedef schaut zum Beispiel nach der Zuordnung von Unicode-Nummern zu den Ausgabezeichen. Die Unicode-Nummern sind dabei in <strong>UCS-4</strong> hinterlegt, wo jeder Buchstabe eine feste 32-Bit-Länge hat, was 4 Byte entspricht.</p>
<div class="wp-caption aligncenter" style="width: 492px"><img title="dpkg-reconfigure locales" src="/bilder/090419-dpkg-reconfigure-locales.jpg" alt="dpkg-reconfigure locales - Locales ganz bequem auswählen" width="482" height="315" /><p class="wp-caption-text">dpkg-reconfigure locales - Locales ganz bequem auswählen</p></div>
<p>Damit haben wir nun alle Sprachen zur Hand, die wir jemals auf unserem System benutzen wollen. Doch welche wollen wir nun aktivieren? Die systemweite Einstellung wird über die Datei <em>/etc/default/locale</em> gesteuert. Mit dem Programm <em>update-locale</em> kann sie auf neue Werte geändert werden. Es empfiehlt sich allerdings, das Basissystem nicht zu verändern. Stattdessen sollte die Einstellung benutzerspezifisch getan werden. Am einfachsten kann man für Freunde der <strong>Bash</strong>-Shell dazu die folgenden Zeilen in der Datei <em>.bashrc</em> im Home-Directory hinzufügen:</p>
<pre>export LANG=de_DE.UTF-8
export LANGUAGE=de_DE:de
export LC_ALL=de_DE.UTF-8</pre>
<p>Wie schön wäre hier ein <strong>LDAP</strong>-Eintrag, der beim Login ausgelesen wird. Unglaublich schön, denke ich. Jetzt müssen wir aber noch einmal kontrollieren, ob das richtig ankam:</p>
<pre>nudge@linux:~&gt; locale
LANG=de_DE.UTF-8
LANGUAGE=de_DE:de
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
LC_COLLATE="de_DE.UTF-8"
LC_MONETARY="de_DE.UTF-8"
LC_MESSAGES="de_DE.UTF-8"
LC_PAPER="de_DE.UTF-8"
LC_NAME="de_DE.UTF-8"
LC_ADDRESS="de_DE.UTF-8"
LC_TELEPHONE="de_DE.UTF-8"
LC_MEASUREMENT="de_DE.UTF-8"
LC_IDENTIFICATION="de_DE.UTF-8"
LC_ALL=de_DE.UTF-8</pre>
<p>Alles klar, das Schiff läuft aus mit Kurs <strong>Unicode</strong>. Den richtigen Beweis erbringen wir jedoch erst jetzt, und zwar mit einem einfachen Test:</p>
<pre>nudge@linux:~&gt; echo "äöü" &gt; test.txt
nudge@linux:~&gt; ls -al test.txt
-rw-r--r-- 1 nudge nudge 7 19. Apr 12:08 test.txt</pre>
<p>Die Datei ist also 7 Byte groß! Das siebente Byte ist wohl das Datei-Ende-Zeichen &#8220;^D&#8221;, und jeder Buchstabe verbraucht nun 2 Byte:</p>
<pre>nudge@linux:~&gt; export LANG=de_DE.ISO-8859-1
nudge@linux:~&gt; export LANGUAGE=de_DE.ISO-8859-1
nudge@linux:~&gt; export LC_ALL=de_DE.ISO-8859-1
nudge@linux:~&gt; xterm
nudge@linux:~&gt; cat test.txt
ÃƒÂ¤ÃƒÂ¶ÃƒÂ¼</pre>
<p>Toll. <img src='http://www.lieber-linux.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  Der erste Zeichen-Salat, der mich richtig freut.</p>
<h3>Fazit</h3>
<p>Das wäre es für heute. Unser <strong>Linux</strong>-System ist auf <strong>UTF-8</strong> umgestellt, und nebenbei haben wir die Spezifika von Linux bezüglich Kodierung und Sprache kennengelernt. Damit <strong>Webseiten</strong> mit <strong>PHP</strong> und <strong>MySQL</strong> mitziehen, gibts demnächst eine Fortsetzung. Um es in der richtigen <strong>Locale</strong> zu sagen: Bleib aufm Sender!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lieber-linux.de/2009/04/character-sets-zeichen-kodierung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

