Je suis vraiment confondu avec le codecs.open function
. Quand je fais:Écrire au fichier UTF-8 en Python
file = codecs.open("temp", "w", "utf-8")
file.write(codecs.BOM_UTF8)
file.close()
Il me donne l'erreur
UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 0: ordinal not in range(128)
Si je fais:
file = open("temp", "w")
file.write(codecs.BOM_UTF8)
file.close()
Il fonctionne très bien.
Question Pourquoi la première méthode échoue-t-elle? Et comment puis-je insérer le bom? Si la deuxième méthode est la bonne façon de le faire, à quoi bon utiliser codecs.open(filename, "w", "utf-8")
?
Ne pas utiliser une nomenclature en UTF-8. *** S'il vous plaît. *** – tchrist
@tchrist Huh?Pourquoi pas? –
@SalmanPK BOM n'est pas nécessaire dans UTF-8 et ajoute seulement de la complexité (par exemple, vous ne pouvez pas simplement concaténer les fichiers BOM et obtenir un texte valide). Voir [cette Q & A] (http://stackoverflow.com/questions/2223882/whats-different-between-utf-8-and-utf-8-without-bom); ne manquez pas le grand commentaire sous Q –