Символы с диакритическими знаками в именах файлов в zip-архивах

Библиотека RubyZip позволяет мне создавать имена файлов с диакритическими знаками:

require 'zip/zip'

Zip::ZipFile.open("my.zip", Zip::ZipFile::CREATE) { |zipfile|
    zipfile.get_output_stream("Café.txt") { |f| f.puts "Hello from ZipFile" }
}

Но в получившемся zip-архиве они выглядят поврежденными:

$ unzip -v my.zip 
Archive:  my.zip
Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
      19  Defl:N       21 -11% 2011-02-11 11:14 c49ac197  Caf??.txt

Если я разархивирую файл в той же системе Linux, в которой он был создан, имя файла будет восстановлено правильно, но могу ли я доверять тому, что они будут работать в другом месте, или мне следует перестраховаться и заглушить имена?


person lambshaanxy    schedule 11.02.2011    source источник


Ответы (1)


В общем, я бы всегда воздерживался от использования символов, отличных от ascii (включая символы с диакритическими знаками), в любом имени файла, особенно в том, к которому должен осуществляться программный доступ, и особенно в сжатом файле. Мало того, что это может вызвать проблемы, учитывая другие языки, которые не так чувствительны к международному уровню, но и декомпрессоры, как известно, плохо справляются с символами, отличными от ascii.

person Dorkus Prime    schedule 11.02.2011
comment
Ага. Оказывается, проблема не в формате ZIP как таковом, а в том, как содержимое интерпретируется различными операционными системами и инструментами обработки ZIP, поэтому мы упростили имена. - person lambshaanxy; 01.03.2011