Aaron Fischer Ingenieur, Vater, Heimwerker, Problemlöser

08 September, 2009

Komische Zeichen

TL;DR:

Ein Thema, mit dem sich eigentlich niemand gerne befasst, ist das Thema Encoding und Zeichen die nicht im ASCII-Zeichensatz definiert sind. Vim kann mit jeder Art von Zeichen umgehen und auch Tools wie dos2unix braucht man nicht mehr zu bemühen.

Ich hatte vor kurzem ein ziemlich hässliches Problem. Ich kopierte ein Stück Quellcode aus einer HTML E-Mail und es ließ sich einfach nicht ausführen. Der Zweifel an meinen Tools und am Betriebssystem begann. Hätte ich die folgenden Kniffe schon vorher gewusst, wäre mir sicher einiges erspart geblieben.

Zuerst einmal sollte man sich die Pflichtlektüre The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets von Joel Spolsky durchlesen, um Zeichensätzen, UTF-8 und den Einsatz dessen zu verstehen.

Öffnet man eine Datei in Vim, sieht man es der Datei zuerst nicht an, in welchem Zeichensatz die Datei ist und auch nicht, in welchem Format sie vorliegt. Das Format (DOS, Unix, Mac) lässt sich mit set ff? anzeigen. Den aktuellen Zeichensatz sieht man mit set fenc?. Will man sich alle Zeichen (auch die Unsichtbaren) anzeigen lassen, setzt man die Option invlist (set invlist). Die Unsichtbaren Zeichen werden als $ dargestellt.

Nun weiß man mit was man es zu tun hat. Der nächste Schritt ist jetzt die Umkodierung des Formats oder/und des Zeichensatzes. Zuerst das Format. Dies geht recht einfach, da sich hier nur die Zeilenumbrüche unterscheiden. Linux macht ein \n (LF, Linefeed), während DOS/Windows \r\n (CR LF, Carriage Return, gefolgt von einem Linefeed) an das Ende jeder Zeile hängt. Dateien die von einem Mac kommen, haben wiederum nur ein \r (Carriage Return) am Zeilenende.

Um nun zwischen den Formaten zu wechseln, gibt es die Option ff, die auf die Werte unix, dos oder mac gesetzt werden können. Nach dem Speichern der Datei wird das neue Format verwendet. Selbiges gilt mit der Option fenc für das Encoding.

:set ff=unix
:set fenc=utf-8 

Nun haben wir alle Zeichen sichtbar gemacht und konvertiert, aber wie gibt man nun spezielle Sonderzeichen ein, für die auf einer deutschen Tastatur kein Platz mehr war? Hierzu gibt es für den Insert Mode die Tastenkombination STRG+k. Will man beispielsweise ein é eingeben, drückt man STRG+k, dann das e und am Ende das Zeichen "". Zeichen, die aus zwei Characters bestehen wie z.b. die Zeichen aus dem Hiragana Zeichensatz, drückt manSTRG+k, gefolgt von den beiden Buchstabenzu", um das Zeichen ず zu erhalten.

Notiz auf dem CheatSheet: