Posts Tagged ‘iconv’

Mittwoch, 7. September 2016

curlftpfs unter OS X mit unterschiedlichen Zeichensätzen

Nach dem Upgrade auf OS X El Capitan funktionierte auf meinem Mac mini ein Backup-Script plötzlich nicht mehr, welches jahrelang brav seinen Dienst verrichtete: Das Script mountet jede Nacht die von mir betreuten Web-Sites mit curlftpfs und synchronisiert die Dateien der Web-Site mittels rsync.

Bei bestimmten Web-Sites liefert der FTP-Server die Dateinamen im Latin1-Format aus, werden bei mir dann aber auf ein Dateisystem mit UTF-8 geschrieben. Hierzu bringt curlftpfs Kommandozeilenoptionen mit, mit welchen man die Dateinamen vor dem Schreiben umkonvertieren kann.

Der Fehler bei dieser Operation lautete:

$ /opt/local/bin/curlftpfs -s -r -o ftp_method=singlecwd -o defer_permissions -o modules=iconv,from_code=latin1 "domain.tld" "/Users/mario/Sites/ftpmounts/domain.tld"
fuse: dlopen(libfusemod_iconv.so, 2): image not found

Schlussendlich realisierte ich, dass ich nun endlich auch die Linux-Kommandozeile unter OS X verwenden kann:

$ /opt/local/bin/curlftpfs -s -r -o ftp_method=singlecwd -o defer_permissions -o codepage=latin1 -o iocharset=utf8 "domain.tld" "/Users/mario/Sites/ftpmounts/domain.tld"

Issue auf Github: fuse: dlopen(libfusemod_iconv.so, 2): image not found

Tags: , ,
Labels: Uncategorized

Keine Kommentare | neuen Kommentar verfassen

Montag, 1. August 2016

Zeichensatz einer .srt-Datei erkennen und nach UTF-8 konvertieren

Heute bin ich einer .srt Untertitel-Datei eines Films aus Asien über den Weg gelaufen, welche in VLC nur Zeichensalat anzeigte:

srt Subtitle SHIFT-JIS

Ziel war es, diese Untertitel-Datei mit iconv in UTF-8 zu konvertieren. Doch bevor ich damit beginnen konnte, musste ich herausfinden, wie der Ursprungszeichensatz hiess.

Glücklicherweise existiert genau für solche Fragestellungen ein Python-Modul, welches einem das Rätselraten abnimmt. Das Modul heisst chardet, welches ich kurzerhand mittels MacPorts installierte:

# port install py27-chardet

Auf Grund einer Unterlassung früherer Tage musste ich einmalig noch das Python auswählen, welches auf der Kommandozeile standardmässig ausgeführt wird:

# port select --set python python27

Via: ImportError: No module named gnuradio

Anschliessend konnte ich die Untertitel von Python parsen lassen:

$ python -c 'import chardet,sys; print chardet.detect(sys.stdin.read())' < Sugihara\ Chiune.srt
{'confidence': 0.99, 'encoding': 'SHIFT_JIS'}

Via: How to auto detect text file encoding?

Bewaffnet mit dieser Information konnte ich nun iconv zu Hilfe ziehen:

$ iconv -f SHIFT-JIS -t UTF-8 Sugihara\ Chiune.srt > Sugihara\ Chiune.UTF-8.srt

Quelle: Japanese Encoding Conversion

Das Resultat sah nun so aus:

srt Subtitle UTF-8

Tags: , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 7. November 2012

Microsoft Domain Policies mit grep unter Windows filtern

Herkules-Aufgabe am Tag, an welchem Barack Obama zum neuen alten Präsident der USA gewählt wurde: Ich musste aus über 150 Domain Policies im HTML-Format diejenigen Dokumente herausfiltern, welche Passworteinstellungen enthielten. Und dies – wohlgemerkt – unter Windows. Wie macht man das?

Im Grund genommen ist das ganze keine grosse Hexerei:

  1. msysgit herunterladen
  2. msysgit installieren
  3. Git bash starten
  4. Ins Verzeichnis mit den Policies wechseln
  5. Folgenden Befehl ausführen:
    $ grep "Enforce password" *.html

Doch oha! grep liefert keine einzige Datei zurück, welche Kennwortrichtlinien enthält? Ein cat auf eine Beispieldatei zeigt, dass zwischen jedem Buchstaben ein Leerzeichen folgt. Indem man eine Beispieldatei mit Notepad++ öffnet, findet man heraus, dass die Exporte vom Domain Controller mit UCS-2 Little Endian enkodiert sind (der Zeichensatz steht in Notepad++ unten rechts in der Statusleiste).

Was nun? Ich habe mir kurzerhand ein bash-Script geschrieben, um die Dateien on-the-fly in ein für grep verständliches Format (UTF-8) zu konvertieren:

#!/bin/sh

if [ $# -lt 2 ]
then
	echo "Usage: $0 [extension of files to search] [string to search for in files]"
	exit 1
fi

for i in *.$1
do
	RES=`iconv -f UCS-2LE -t UTF-8 "$i" | grep "$2"`
	RET=$?

	if [ $RET -eq 0 ]
	then
		echo "$RET - $i"
		echo $RES
		echo ""
	fi
done

exit 0

Das Script tut folgendes: Zuerst liest es alle Dateien im aktuellen Verzeichnis aus, welche auf .html enden. In einer Schleife wird nun jede gefundene Datei mittels iconv von UCS-2LE nach UTF-8 konvertiert und an grep weitergepipet. grep sucht im Zeichensalat nach „Enforce password“. Die bash-Variable $? speichert das Resultat dieses Befehls; sprich 0 falls die Zeichenkette gefunden wurde, 1 (oder eine andere Zahl ungleich 0), wenn grep gestolpert ist oder einfach nichts gefunden hat. Ist $RET gleich 0, wird der Dateiname ausgegeben.

Schlussendlich fanden sich in den 150 Dateien gerade mal 6 Stück, welche Passworteinstellungen enthalten. Doch statt dem fehleranfälligen manuellen Geklicke habe ich quelloffene Tools, gepaart mit ein wenig Scripting-Wissen für mich arbeiten lassen.

Gut zu Wissen

Wer die Namen der Zeichensätze nicht auswendig weiss, dem wird unter folgendem Link geholfen:

libiconv

Tags: , , , , , , , , , , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen