zipfile est-il compatible, avec des fichiers dont le nom est en Unicode ?
Cela fait 1 heure que je tente de créer un fichier compressé, à partir d'un
fichier dont le nom est en cyrillique. Et, au mieux, j'ai la TB suivant :
Traceback (most recent call last):
File "D:\dev\Python\zipuni.py", line 7, in ?
z.write(f)
File "C:\Python24\lib\zipfile.py", line 412, in write
self.fp.write(zinfo.FileHeader())
File "C:\Python24\lib\zipfile.py", line 166, in FileHeader
return header + self.filename + self.extra
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 10:
ordinal not in range(128)
zipfile est-il compatible, avec des fichiers dont le nom est en Unicode ?
Cela fait 1 heure que je tente de créer un fichier compressé, à partir d'un fichier dont le nom est en cyrillique. Et, au mieux, j'ai la
TB suivant :
Traceback (most recent call last): File "D:devPythonzipuni.py", line 7, in ? z.write(f) File "C:Python24libzipfile.py", line 412, in write self.fp.write(zinfo.FileHeader()) File "C:Python24libzipfile.py", line 166, in FileHeader return header + self.filename + self.extra UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 10: ordinal not in range(128)
Bonjour, Je travaille assez peu avec Python. (Je m'en sers parfois pour créer des objets COM utilisés ensuite dans d'autres langages.)Je ne suis pas du tout spécialiste de ce langage.
Je me souviens avoir eu ce problème. Dans un premier temps j'utilisais :
path.encode('latin-1') # path étant l'argument passé à la fonction unzip contenant le chemin et le nom du fichier à dézipper.
Je crois bien en être venu à bout en ajoutant simplement en tête du fichier :
if hasattr(sys,"setdefaultencoding"): sys.setdefaultencoding('latin-1') else: pass
..et j'ai, par exemple, bidouillé une fonction unzip :
def unzip(self, path ): path=os.path.normpath (path) sortie=-1 tempexiste=0 try: archive = ZipFile(path, "r", ZIP_DEFLATED) names = archive.namelist() try: for name in names: try: if not (os.path.exists(os.path.dirname(name))): os.makedirs(os.path.dirname(name)) temp = open(name, "wb") tempexiste=1 data = archive.read(name) temp.write(data) finally: if tempexiste == 1: temp.close() finally: archive.close() except (IOError,OSError): sortie=0 pass return sortie
zipfile est-il compatible, avec des fichiers dont le nom est en Unicode ?
Cela fait 1 heure que je tente de créer un fichier compressé, à
partir d'un fichier dont le nom est en cyrillique. Et, au mieux, j'ai la
TB suivant :
Traceback (most recent call last):
File "D:devPythonzipuni.py", line 7, in ?
z.write(f)
File "C:Python24libzipfile.py", line 412, in write
self.fp.write(zinfo.FileHeader())
File "C:Python24libzipfile.py", line 166, in FileHeader
return header + self.filename + self.extra
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position
10: ordinal not in range(128)
Bonjour,
Je travaille assez peu avec Python. (Je m'en sers parfois pour créer des
objets COM utilisés ensuite dans d'autres langages.)Je ne suis pas du
tout spécialiste de ce langage.
Je me souviens avoir eu ce problème. Dans un premier temps j'utilisais :
path.encode('latin-1')
# path étant l'argument passé à la fonction unzip contenant le chemin et
le nom du fichier à dézipper.
Je crois bien en être venu à bout en ajoutant simplement en tête du
fichier :
if hasattr(sys,"setdefaultencoding"):
sys.setdefaultencoding('latin-1')
else:
pass
..et j'ai, par exemple, bidouillé une fonction unzip :
def unzip(self, path ):
path=os.path.normpath (path)
sortie=-1
tempexiste=0
try:
archive = ZipFile(path, "r", ZIP_DEFLATED)
names = archive.namelist()
try:
for name in names:
try:
if not (os.path.exists(os.path.dirname(name))):
os.makedirs(os.path.dirname(name))
temp = open(name, "wb")
tempexiste=1
data = archive.read(name)
temp.write(data)
finally:
if tempexiste == 1:
temp.close()
finally:
archive.close()
except (IOError,OSError):
sortie=0
pass
return sortie
zipfile est-il compatible, avec des fichiers dont le nom est en Unicode ?
Cela fait 1 heure que je tente de créer un fichier compressé, à partir d'un fichier dont le nom est en cyrillique. Et, au mieux, j'ai la
TB suivant :
Traceback (most recent call last): File "D:devPythonzipuni.py", line 7, in ? z.write(f) File "C:Python24libzipfile.py", line 412, in write self.fp.write(zinfo.FileHeader()) File "C:Python24libzipfile.py", line 166, in FileHeader return header + self.filename + self.extra UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 10: ordinal not in range(128)
Bonjour, Je travaille assez peu avec Python. (Je m'en sers parfois pour créer des objets COM utilisés ensuite dans d'autres langages.)Je ne suis pas du tout spécialiste de ce langage.
Je me souviens avoir eu ce problème. Dans un premier temps j'utilisais :
path.encode('latin-1') # path étant l'argument passé à la fonction unzip contenant le chemin et le nom du fichier à dézipper.
Je crois bien en être venu à bout en ajoutant simplement en tête du fichier :
if hasattr(sys,"setdefaultencoding"): sys.setdefaultencoding('latin-1') else: pass
..et j'ai, par exemple, bidouillé une fonction unzip :
def unzip(self, path ): path=os.path.normpath (path) sortie=-1 tempexiste=0 try: archive = ZipFile(path, "r", ZIP_DEFLATED) names = archive.namelist() try: for name in names: try: if not (os.path.exists(os.path.dirname(name))): os.makedirs(os.path.dirname(name)) temp = open(name, "wb") tempexiste=1 data = archive.read(name) temp.write(data) finally: if tempexiste == 1: temp.close() finally: archive.close() except (IOError,OSError): sortie=0 pass return sortie
Hervé Cauwelier
Bonsoir !
zipfile est-il compatible, avec des fichiers dont le nom est en Unicode ?
Tu es sûr que le nom est écrit en unicode, et non codé en UTF-8 ou autre ? Ou que inversement le nom ne doit pas être codé au format du système de fichier ?
Traceback (most recent call last): File "D:devPythonzipuni.py", line 7, in ? z.write(f) File "C:Python24libzipfile.py", line 412, in write self.fp.write(zinfo.FileHeader()) File "C:Python24libzipfile.py", line 166, in FileHeader return header + self.filename + self.extra UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 10: ordinal not in range(128)
Problème de codage, tu ne maîtrises pas celui de ton code source ou de tes chaînes. Python n'a rien de mieux que ASCII pour coder ta chaîne. Et comme il y a des caractères qui sortent d'ASCII...
Je suggère une bonne mise à niveau sur unicode, string et le codage des codes source Python.
-- Hervé Cauwelier http://www.oursours.net/
Bonsoir !
zipfile est-il compatible, avec des fichiers dont le nom est en Unicode ?
Tu es sûr que le nom est écrit en unicode, et non codé en UTF-8 ou autre
? Ou que inversement le nom ne doit pas être codé au format du système
de fichier ?
Traceback (most recent call last):
File "D:devPythonzipuni.py", line 7, in ?
z.write(f)
File "C:Python24libzipfile.py", line 412, in write
self.fp.write(zinfo.FileHeader())
File "C:Python24libzipfile.py", line 166, in FileHeader
return header + self.filename + self.extra
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 10:
ordinal not in range(128)
Problème de codage, tu ne maîtrises pas celui de ton code source ou de
tes chaînes. Python n'a rien de mieux que ASCII pour coder ta chaîne. Et
comme il y a des caractères qui sortent d'ASCII...
Je suggère une bonne mise à niveau sur unicode, string et le codage des
codes source Python.
zipfile est-il compatible, avec des fichiers dont le nom est en Unicode ?
Tu es sûr que le nom est écrit en unicode, et non codé en UTF-8 ou autre ? Ou que inversement le nom ne doit pas être codé au format du système de fichier ?
Traceback (most recent call last): File "D:devPythonzipuni.py", line 7, in ? z.write(f) File "C:Python24libzipfile.py", line 412, in write self.fp.write(zinfo.FileHeader()) File "C:Python24libzipfile.py", line 166, in FileHeader return header + self.filename + self.extra UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 10: ordinal not in range(128)
Problème de codage, tu ne maîtrises pas celui de ton code source ou de tes chaînes. Python n'a rien de mieux que ASCII pour coder ta chaîne. Et comme il y a des caractères qui sortent d'ASCII...
Je suggère une bonne mise à niveau sur unicode, string et le codage des codes source Python.
-- Hervé Cauwelier http://www.oursours.net/
Hervé Cauwelier
if hasattr(sys,"setdefaultencoding"): sys.setdefaultencoding('latin-1') else: pass
Argh ! ARGH ! Lire la documentation de Python et en première ou deuxièe ligne, mettre :
# -*- encoding: latin-1 -*-
ou encore :
# -*- encoding: iso-8859-1 -*-
Et utiliser un éditeur capable de comprendre la notion de codage de caractère, ce qui est un minimum pour un logiciel se prétendant éditeur de texte. S'il peut détecter lui-même cette ligne, c'est encore mieux.
-- Hervé Cauwelier http://www.oursours.net/
if hasattr(sys,"setdefaultencoding"):
sys.setdefaultencoding('latin-1')
else:
pass
Argh ! ARGH ! Lire la documentation de Python et en première ou deuxièe
ligne, mettre :
# -*- encoding: latin-1 -*-
ou encore :
# -*- encoding: iso-8859-1 -*-
Et utiliser un éditeur capable de comprendre la notion de codage de
caractère, ce qui est un minimum pour un logiciel se prétendant éditeur
de texte. S'il peut détecter lui-même cette ligne, c'est encore mieux.
if hasattr(sys,"setdefaultencoding"): sys.setdefaultencoding('latin-1') else: pass
Argh ! ARGH ! Lire la documentation de Python et en première ou deuxièe ligne, mettre :
# -*- encoding: latin-1 -*-
ou encore :
# -*- encoding: iso-8859-1 -*-
Et utiliser un éditeur capable de comprendre la notion de codage de caractère, ce qui est un minimum pour un logiciel se prétendant éditeur de texte. S'il peut détecter lui-même cette ligne, c'est encore mieux.
-- Hervé Cauwelier http://www.oursours.net/
Do Re Mi chel La Si Do
Bonjour !
Je crains que le problème ne soit pas dans le code-source du script.
C'est le NOM DU FICHIER qui est en Cyrillique. Pas le script-source Python, qui, lui, est en utf-8 (édité avec wScite).
D'ailleurs, si j'ouvre le fichier (f=open...), je n'ai pas de problème. C'est donc bien DANS zipfile qu'à lieu le problème. Ce que montre la TraceBack.
Je met le code source, mais je ne suis pas sûr que l'utf-8 passe, sur usenet...
Je crains que le problème ne soit pas dans le code-source du script.
C'est le NOM DU FICHIER qui est en Cyrillique. Pas le script-source Python,
qui, lui, est en utf-8 (édité avec wScite).
D'ailleurs, si j'ouvre le fichier (f=open...), je n'ai pas de problème.
C'est donc bien DANS zipfile qu'à lieu le problème. Ce que montre la
TraceBack.
Je met le code source, mais je ne suis pas sûr que l'utf-8 passe, sur
usenet...
Je crains que le problème ne soit pas dans le code-source du script.
C'est le NOM DU FICHIER qui est en Cyrillique. Pas le script-source Python, qui, lui, est en utf-8 (édité avec wScite).
D'ailleurs, si j'ouvre le fichier (f=open...), je n'ai pas de problème. C'est donc bien DANS zipfile qu'à lieu le problème. Ce que montre la TraceBack.
Je met le code source, mais je ne suis pas sûr que l'utf-8 passe, sur usenet...
Comme les caractères cyrilliques ne passent pas, j'ai envoyé, en réponse, le même message en Html. Je sais que seuls certains pourront le lire ; mais, comment faire ?
@-salutations
Michel Claveau
Re !
Comme les caractères cyrilliques ne passent pas, j'ai envoyé, en réponse, le
même message en Html.
Je sais que seuls certains pourront le lire ; mais, comment faire ?
Comme les caractères cyrilliques ne passent pas, j'ai envoyé, en réponse, le même message en Html. Je sais que seuls certains pourront le lire ; mais, comment faire ?
@-salutations
Michel Claveau
Do Re Mi chel La Si Do
Bonjour !
Je ne peux pas utiliser le latin-1, car le nom du fichier est en cyrillique. Si je tente d'encoder ce nom en utf-8, c'est l'os.stat, appelé par zipfile qui ne trouve plus le fichier... Avec utf-16 également, (un zéro terminal est détecté).
Maintenant, je me demande si le module os accepte des noms de fichier en unicode...
Je vais faire quelques essais supplémentaires.
@-salutations
Michel Claveau
PS : je fais aussi des serveurs COM en Python. Pas beaucoup, mais de gros...
Bonjour !
Je ne peux pas utiliser le latin-1, car le nom du fichier est en cyrillique.
Si je tente d'encoder ce nom en utf-8, c'est l'os.stat, appelé par zipfile
qui ne trouve plus le fichier...
Avec utf-16 également, (un zéro terminal est détecté).
Maintenant, je me demande si le module os accepte des noms de fichier en
unicode...
Je vais faire quelques essais supplémentaires.
@-salutations
Michel Claveau
PS : je fais aussi des serveurs COM en Python. Pas beaucoup, mais de gros...
Je ne peux pas utiliser le latin-1, car le nom du fichier est en cyrillique. Si je tente d'encoder ce nom en utf-8, c'est l'os.stat, appelé par zipfile qui ne trouve plus le fichier... Avec utf-16 également, (un zéro terminal est détecté).
Maintenant, je me demande si le module os accepte des noms de fichier en unicode...
Je vais faire quelques essais supplémentaires.
@-salutations
Michel Claveau
PS : je fais aussi des serveurs COM en Python. Pas beaucoup, mais de gros...
Do Re Mi chel La Si Do
Re
Rien à faire. J'ai bien essayé de décoder en utf-8 (mon script est encodé en utf-8). Cela fonctionne pour f=open( pour os.stat( mais pas pour zipfile.
Dommage...
@-salutations
Michel Claveau
Re
Rien à faire. J'ai bien essayé de décoder en utf-8 (mon script est encodé en
utf-8).
Cela fonctionne pour f=open( pour os.stat( mais pas pour zipfile.
Rien à faire. J'ai bien essayé de décoder en utf-8 (mon script est encodé en utf-8). Cela fonctionne pour f=open( pour os.stat( mais pas pour zipfile.
Dommage...
@-salutations
Michel Claveau
tiissa
Je met le code source, mais je ne suis pas sûr que l'utf-8 passe, sur usenet...
Je ne sais pas, mais sans les en-tetes 'Content-Type' et 'Content-Transfer-Encoding', ca me semble perdu d'avance. Peut-etre en regardant du cote des parametres de votre lecteur de news, si c'est possible ? Enfin, ce n'est pas important.
Ce n'est pas vraiment une solution, mais il est peut-etre possible de creer l'archive dans un fichier temporaire puis de le renommer/deplacer avec son nom en cyrillique.
Je met le code source, mais je ne suis pas sûr que l'utf-8 passe, sur
usenet...
Je ne sais pas, mais sans les en-tetes 'Content-Type' et
'Content-Transfer-Encoding', ca me semble perdu d'avance.
Peut-etre en regardant du cote des parametres de votre lecteur de news,
si c'est possible ?
Enfin, ce n'est pas important.
Ce n'est pas vraiment une solution, mais il est peut-etre possible de
creer l'archive dans un fichier temporaire puis de le renommer/deplacer
avec son nom en cyrillique.
Je met le code source, mais je ne suis pas sûr que l'utf-8 passe, sur usenet...
Je ne sais pas, mais sans les en-tetes 'Content-Type' et 'Content-Transfer-Encoding', ca me semble perdu d'avance. Peut-etre en regardant du cote des parametres de votre lecteur de news, si c'est possible ? Enfin, ce n'est pas important.
Ce n'est pas vraiment une solution, mais il est peut-etre possible de creer l'archive dans un fichier temporaire puis de le renommer/deplacer avec son nom en cyrillique.
William Dode
On 24-07-2005, Do Re Mi chel La Si Do wrote:
Bonsoir !
zipfile est-il compatible, avec des fichiers dont le nom est en Unicode ?
Ne me demande pas pourquoi parceque je suis tenu au secret professionel, mais les fichiers zip sont encodés en cp437, il faut donc encoder le nom en cp437.
Par ex :
# -*- encoding: latin-1 -*- from zipfile import ZipFile z = ZipFile("myzip.zip","w") z.write("ààà",u"ààà".encode("cp437")) z.close()
Cela fait 1 heure que je tente de créer un fichier compressé, à partir d'un fichier dont le nom est en cyrillique. Et, au mieux, j'ai la TB suivant :
Traceback (most recent call last): File "D:devPythonzipuni.py", line 7, in ? z.write(f) File "C:Python24libzipfile.py", line 412, in write self.fp.write(zinfo.FileHeader()) File "C:Python24libzipfile.py", line 166, in FileHeader return header + self.filename + self.extra UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 10: ordinal not in range(128)
@-salutations
Michel Claveau
-- William Dodé - http://flibuste.net
On 24-07-2005, Do Re Mi chel La Si Do wrote:
Bonsoir !
zipfile est-il compatible, avec des fichiers dont le nom est en Unicode ?
Ne me demande pas pourquoi parceque je suis tenu au secret professionel, mais
les fichiers zip sont encodés en cp437, il faut donc encoder le nom en cp437.
Par ex :
# -*- encoding: latin-1 -*-
from zipfile import ZipFile
z = ZipFile("myzip.zip","w")
z.write("ààà",u"ààà".encode("cp437"))
z.close()
Cela fait 1 heure que je tente de créer un fichier compressé, à partir d'un
fichier dont le nom est en cyrillique. Et, au mieux, j'ai la TB suivant :
Traceback (most recent call last):
File "D:devPythonzipuni.py", line 7, in ?
z.write(f)
File "C:Python24libzipfile.py", line 412, in write
self.fp.write(zinfo.FileHeader())
File "C:Python24libzipfile.py", line 166, in FileHeader
return header + self.filename + self.extra
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 10:
ordinal not in range(128)
zipfile est-il compatible, avec des fichiers dont le nom est en Unicode ?
Ne me demande pas pourquoi parceque je suis tenu au secret professionel, mais les fichiers zip sont encodés en cp437, il faut donc encoder le nom en cp437.
Par ex :
# -*- encoding: latin-1 -*- from zipfile import ZipFile z = ZipFile("myzip.zip","w") z.write("ààà",u"ààà".encode("cp437")) z.close()
Cela fait 1 heure que je tente de créer un fichier compressé, à partir d'un fichier dont le nom est en cyrillique. Et, au mieux, j'ai la TB suivant :
Traceback (most recent call last): File "D:devPythonzipuni.py", line 7, in ? z.write(f) File "C:Python24libzipfile.py", line 412, in write self.fp.write(zinfo.FileHeader()) File "C:Python24libzipfile.py", line 166, in FileHeader return header + self.filename + self.extra UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 10: ordinal not in range(128)
@-salutations
Michel Claveau
-- William Dodé - http://flibuste.net
Do Re Mi chel La Si Do
Bonsoir !
Effectivement, c'est une idée. Disons que ça me permettra d'attendre Python 2.5, et son projet de refonte de ziplib.
Merci.
Michel Claveau
Bonsoir !
Effectivement, c'est une idée. Disons que ça me permettra d'attendre Python
2.5, et son projet de refonte de ziplib.