list2form : gestion des erreurs et des petits fichiers (merci cgi.py…)
[progfou.git] / unicode / php-serialized-recode.py
CommitLineData
7b73b06f
P
1#!/usr/bin/python
2# Outil de recodage de données PHP sérialisées (latin1→utf8)
3# (utilisé pour recoder les fichiers .dat de gallery)
4# Statut : experimental
5import sys, re
6
7PATTERN = r's:([0-9]+):"([^"]+)"'
8
9def serialized_recode(from_charset, to_charset):
10 def serialized_sub(m):
11 n, s = m.groups()
12 if int(n) != len(s):
13 print "Error: int(%s) != len(%s)" % (n, s)
14 else:
15 s = s.decode(from_charset).encode(to_charset)
16 n = len(s)
17 return 's:%s:"%s"' % (n, s)
18 return serialized_sub
19
20standard_sub = serialized_recode('latin1', 'utf8')
21
22if len(sys.argv) < 2:
23 s = sys.stdin.read()
24 s = re.sub(PATTERN, standard_sub, s)
25 sys.stdout.write(s)
26else:
27 for a in sys.argv[1:]:
28 f = file(a, 'r+')
29 s = f.read()
30 s = re.sub(PATTERN, standard_sub, s)
31 f.seek(0)
32 f.write(s)
33 f.truncate()
34 f.close()