ubuntuusers.de

Zeichensatzkonvertierung

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Inhaltsverzeichnis
  1. Bash
  2. Ruby
  3. Python
  4. Perl

Im folgenden findet man Skripte bzw. Einzeiler in verschiedenen Programmiersprachen, um den Zeichensatz einer Datei zu ändern.

Die Dateien für die Skripte müssen gegebenfalls mit einem Editor[2] erstellt und dann ausführbar[3] gemacht werden.

Bash

In der Shell kann man dafür den Befehl iconv benutzen. Die iconv-Routinen werden mit dem Paket libc6 installiert, sollten also auf allen Linux-Systemen vorhanden sein.

Die Parameter -f(= "from") und -t(= "to") geben die Start- und Zielkodierung an.

Normalerweise wird der konvertierte Text auf die Standardausgabe geschrieben. Zur Ausgabe in eine Datei setzt man die Option -o(= "output").

iconv -f ISO-8859-15 -t UTF-8 -o utf8datei.txt isodatei.txt 

Eine Liste der auf dem System bekannten Kodierungen erhält man mit dem Befehl

iconv -l 

Der Befehl recode arbeitet ähnlich und ist nützlich, wenn man das konvertierte Ergebnis wieder in der ursprünglichen Datei speichern will.

Wenn man das Encoding nicht kennt, aber weiß, dass ein bestimmtes Wort im Text vorkommt, dann kann man mit dem encoding-finder nach möglichen Encodings suchen - meist liefert das Script mehrere Kandidaten.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#!/bin/bash
#
# encoding-finder.sh
# (C) GPLv3, Stefan Wagner 2007
#
# In einer Datei einen bekannten (Teil-)String (z.B.: Begrüßung) suchen,
# indem alle Encodings ausprobiert werden.
#
[[ $# -ne 2 ]] && echo "Usage: encoding-finder.sh FILE PATTERN_WITH_UMLAUT_FOR_SURE_IN_FILE" && exit
FILE=$1
PATTERN=$2
for enc in $( iconv -l | sed 's/..$//')
do
        iconv -f $enc -t UTF-8 $FILE  2>/dev/null | grep $PATTERN && echo $enc
done

Ruby

Ruby stellt eine Wrapperklasse zur Verfügung.

Zu beachten ist, dass die Konvertierungsroutine noch einmal mit nil als Parameter aufgerufen werden muss, da noch Zeichen im Puffer zurückgeblieben sein können.

1
2
3
4
5
6
7
8
require 'iconv'

k = Iconv.new("UTF-8", "ISO-8859-15")

utf8string = k.iconv(isostring)
utf8string << k.iconv(nil)

k.close

Python

Bei Python 2.x hat jeder String eine "decode" Methode. Mit dieser kann man den String umwandeln, im folgenden Beispiel von Latin-1 nach UTF-8

1
"Hier ist der umzuwandelnde Sting".decode("latin1").encode("utf-8")

Perl

In Perl gibt es z.B. das Encode::Encoder Modul.

1
2
3
4
5
6
7
8
9
#!/usr/bin/perl -w

use strict;

use Encode::Encoder qw(encoder);

my $string = "Hello Wörld!";
print encoder($string)->iso_8859_1, "\n";
print encoder($string)->utf8->latin1, "\n"; #hin und zurück

Diese Revision wurde am 24. März 2012 23:49 von ubot erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Programmierung