Уведомления

Группа в Telegram: @pythonsu

#1 Май 17, 2010 20:33:23

xyxel
От:
Зарегистрирован: 2010-04-18
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

опять кодировка с zipом

Правильно ли я понимаю, что в результате этого кода, я в zip-архив записываю файл с названием в unicode-кодировке?

zout = zipfile.ZipFile(“test.zip”, “w”)
zout.write(“cr.conf”, u'кириллица.conf')
zout.close()

Если да, то почему в архиве вместо названия вопросительные знаки



Офлайн

#2 Май 17, 2010 22:07:53

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

опять кодировка с zipом

Иногда полезно читать доки, они как говорили в старину, рулез :)
Note
There is no official file name encoding for ZIP files. If you have unicode file names, you must convert them to byte strings in your desired encoding before passing them to write(). WinZip interprets all file names as encoded in CP437, also known as DOS Latin.



Офлайн

#3 Май 19, 2010 15:02:36

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

опять кодировка с zipом

Заявление о том, что zipfile поддерживает только cp437 не совсем верно.

Начиная с python 2.6 имена могут писаться в utf-8 (не путайте с unicode), устанавливая 0x800 в флагах



Офлайн

#4 Май 19, 2010 18:18:27

xyxel
От:
Зарегистрирован: 2010-04-18
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

опять кодировка с zipом

А можно ссылку на какую-нибудь полезную статью? (На форуме искал) А то, либо про кодировку читаю, либо про zip. А связать их вместе, что-то ну никак не получается.



Офлайн

#5 Май 19, 2010 18:50:50

xyxel
От:
Зарегистрирован: 2010-04-18
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

опять кодировка с zipом

То есть выглядеть должно примерно так:
zout = zipfile.ZipFile(“test.zip”, “w”)
s = u'кириллица.conf'
zout.write(“cr.conf”, s.encode('cp437'))
zout.close()
Верно?
Но в этом случае выдает UnicodeEncodeError.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version