viem77: (9May)
[personal profile] viem77
...полезная, я бы сказал, фича. Возможность скачать все аттачи к письму единым zip-архивом. И все бы было хорошо, наверно, но из желания добиться наибольшей совместимости и, видимо, скорости, анализа платформы пользователя не проводится. И имена файлов валятся в архив даже не в CP1251 кодировке, а в CP866 (!). Не, я понимаю, винда поймет, а линуксисты - народ плечистый, на пару с юниксоидами как нибудь распедалят тот факт, что стандартный unzip напрочь не учитывает существования других кодировок, да и стандарт InfoZIP способа их хранения в явном виде, в общем-то, не предусматривает. В общем, пришлось лепить срочный quick-and-dirty kluge для распаковки этих аттачментов:
#!/usr/bin/python

import zipfile, sys

zip = zipfile.ZipFile(sys.argv[1])
files = zip.infolist()
names = zip.namelist()
names = [unicode(name,'CP866'for name in names]
for item in files:
  name = names[files.index(item)]
  print 'Extracting %s... ' % name,
  fobj = zip.open(item)
  data = fobj.read()
  print '%d bytes' % len(data)
  aobj = open(name,'w')
  aobj.write(data)
  aobj.close()
  fobj.close()


















(deleted comment)

Date: 2011-04-22 08:13 am (UTC)
From: [identity profile] viem77.livejournal.com
С той же проблемой?
(deleted comment)

Date: 2011-04-23 12:30 pm (UTC)
From: [identity profile] viem77.livejournal.com
Как было определено экспериментами, гугл и яндекс эту проблему решили, хоть и по разному. В комментах ниже есть подробности.

Date: 2011-04-22 09:13 am (UTC)
From: [identity profile] http://users.livejournal.com/part1zan_/
Бля. Надо учить пыхтон.

Date: 2011-04-23 12:30 pm (UTC)
From: [identity profile] viem77.livejournal.com
Надо.
(deleted comment)

Date: 2011-04-23 12:26 pm (UTC)
From: [identity profile] viem77.livejournal.com
Я таки решил проверить. Гугл единственный, кто предложил выбор кодировки.
Яндекс и мейл держат список имен в CP866, гугл, в соответствии с выбором, в UTF-8. Но яндекс, как и гугл, еще сохраняют поле extra (The central-directory extra field contains a subfield with ID 0x7075 (UTF8 path name)), в котором содержится имя файла в UTF-8. Поэтому яндексовские зипы распаковываются нормально. А вопросики unzip кажет в любом случае, ибо в нем присутствует if (!isprint(*p)) *p = '?'; /* change non-printable chars to '?' */, а локаль, походу, выставляется как C, надо копать.

February 2013

S M T W T F S
     12
3456789
1011121314 1516
17181920212223
2425262728  

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 26th, 2017 12:44 am
Powered by Dreamwidth Studios