Mais si, je vais finir par comprendre...
A défaut d'autre chose, j'exploiterais la solution que je viens de donner:
1- enregistrer le contenu qu'on veut ajouter, dans un fichier temporaire en texte utf-16,
2- et le recopier sous forme binaire à la fin de l'autre, en oubliant son BOM avec seek.
Je viens d'essayer: ça marche. Voilà ce que j'ai fait:
J'ai un fichier "source.txt" encodé en utf-8, et qui contient:
Je le convertit en fichier utf-16 avec BOM => fichier "destination.txt":
Code:
1 2 3 4 5 6
| import codecs
with codecs.open("source.txt", 'r', 'utf-8') as fs:
with codecs.open("destination.txt", 'w', 'utf-16') as fd:
for ligne in fs:
fd.write(ligne) |
Maintenant, je fait la même chose avec comme fichier destination un fichier temporaire "temp.txt", toujours texte en utf-16 avec BOM:
Code:
1 2 3 4
| with codecs.open("source.txt", 'r', 'utf-8') as fs:
with codecs.open("temp.txt", 'w', 'utf-16') as fd:
for ligne in fs:
fd.write(ligne) |
Et maintenant, je vais transporter le fichier temporaire "temp.txt" en mode binaire (sans son BOM) à la fin du 1er fichier "destination.txt":
Code:
1 2 3 4
| with open("temp.txt", 'rb') as fs:
with open("destination.txt", 'ab') as fd:
fs.seek(2)
fd.write(fs.read()) |
Et voilà! Si j'essaie de lire le fichier destination.txt, il contient bien 2 fois le fichier source avec l'encodage utf-16:
Code:
1 2 3 4 5 6 7 8 9
| with codecs.open("destination.txt", 'r', 'utf-16') as fd:
for ligne in fd:
print ligne.rstrip()
abcéèçàùôï
abcéèçàùôï
abcéèçàùôï
abcéèçàùôï
abcéèçàùôï
abcéèçàùôï |
J'ai bon?