Hin und wieder komme ich mal aus den verschiedensten Gründen in die Verlegenheit, Dateien von einem Latin-1 System (z.B. Windows XP) auf ein UTF-8 System (z.B. Linux) zu transferieren. Dabei gehen natürlich die Umlaute in den Dateinamen hops, was den Umgang mit den Dateien erschwert. Um diesem Problem zu Leibe zu rücken, habe ich das folgende Python-Script geschrieben, welches alle Dateien im gegebenen Verzeichnis konvertiert. Die eigentliche Zeichenumsetzung stammt dabei von Sean B. Palmer.
Vorsicht ist geboten, wenn die Dateien bereits einmal konvertiert wurden. In diesem Falle macht man sich die Umlaute gerade wieder kaputt, wenn man dieses Script drüber jagt.
#!/usr/bin/python
#coding=UTF-8
import os
directory = "CHANGE ME!!!!!!!!!"
############# SNIP ##############
import sys
import re
r_iso = re.compile('(\x80-\xFF?)')
def iso2utf(s):
def conv(m):
c = m.group(0)
return ('\xC2'+c, '\xC3'+chr(ord(c) - 64))ord(c) > 0xBF?
return r_iso.sub(conv, s)
################ SNAP #############
for root, dirs, files in os.walk(directory):
print ""
print root
for file in files:
print " * " + file
fullpath = os.path.join(root, file)
fullpath_new = iso2utf(fullpath)
print " -> " + fullpath
print " -> " + fullpath_new
try:
os.rename(fullpath, fullpath_new)
except:
print " -> FEHLER!"
for dir in dirs:
print " * " + dir
fullpath = os.path.join(root, dir)
fullpath_new = iso2utf(fullpath)
print " -> " + fullpath
print " -> " + fullpath_new
try:
os.rename(fullpath, fullpath_new)
except:
print " -> FEHLER!"