Re: Проблемы с локалями в zip-архивах, созданных под виндой (названия файлов под дебиан выглядят кракозябельно)
On 10.03.2010 12:55, James Brown wrote:
> ОС - Lenny AMD64
> UnZip 5.52 of 28 February 2005, by Debian (консоль)
> File Roller 2.22.4 (ГУИ)
>
> Вот такой ужос происходит при распаковывании архива консольной командой:
> Archive: Kipnis Evidence 2010 February.zip
> creating: Kipnis Evidence 2010 February/
> creating: Kipnis Evidence 2010 February/1 ����Ӫ�. ������-����Կ�. ����
> Вот так выглядит сей ужос в ГУЕ:
> http://img59.imageshack.us/img59/2760/screenshotarm.png
>
> Как побороть?
1) распаковывать: LC_ALL=C 7z x /path/to/file.zip
(почему не unzip? потому что unzip слишком умный и думает, что знает в какой
кодировке оно было [cp437], и какая кодировка у тебя [latin1], и перекодирует;
разумеется, думает он неправильно, в результате получается мусор)
2) угадывать кодировку (русские обычно в cp866, японские - sjis/cp932, и так
далее); в сложных случаях я использую python-chardet и ls|chardet [см. аттач]
3) переименовывать: convmv -f cp866 -t utf-8 --notest -r
#!/usr/bin/python
import sys
import urllib
from chardet.universaldetector import UniversalDetector
def fchardet(usock):
detector.reset()
for line in usock.readlines():
detector.feed(line)
if detector.done: break
detector.close()
usock.close()
return detector.result
detector = UniversalDetector()
if len(sys.argv) < 2:
print fchardet(sys.stdin)
else:
for u in sys.argv[1:]:
print u
print fchardet(urllib.urlopen(u))
Reply to: