2015-08-21 2 views
0

Я написал код Tclsh, который будет извлекать содержимое zip-файла в формате base64 с помощью метода xml-rpc. Я демпинг, что данные base64 в файл, используя следующий фрагмент кода:Tclsh convert base64 dump в zip-файл

#!/usr/bin/tclsh 
... 
set mybase64Dump [myXmlRpcCallToReturnThisDump] 
set zipFilePtr [open "xyz.zip" "w"] 
puts $zipFilePtr $mybase64Dump 
close $zipFilePte 

Zip файл получал генерироваться с XKbytes размера, но при попытке открыть с помощью 7zip он говорит, Is not Archive. Но я копирую вставку с таким же дампом base64 в онлайн-конвертер. Это давало мне правильный извлекаемый zip-файл.

Это что-то, что я делаю неправильно?

+0

Почтовый файл не просто содержит байты файла, который вы хотите сохранить: в нем также много метаданных, которые необходимо распаковать для понимания содержимого. Онлайновый конвертер, вероятно, создал эти метаданные для вас, но если вы просто храните необработанные данные в файле, это не будет архив zip. –

ответ

2

Возможно, вам необходимо настроить выходной файл как двоичный, а не ascii. Перевод по умолчанию для вновь открытого файла - «авто», который выполняет системный перевод символов конца строки, что не является тем, что вы хотите для .zip-файла. Настройте это с помощью fconfigure на дескрипторе после его открытия или добавив флаг доступа BINARY к команде open.

См. http://www.tcl.tk/man/tcl8.5/TclCmd/open.htm и http://www.tcl.tk/man/tcl8.5/TclCmd/fconfigure.htm для получения более подробной информации о синтаксисе.

+1

Удовлетворительный факт, двоичный флаг для открытия - это _pure_ удобство. Он просто выполняет «fconfigure -translation binary» для вас за кулисами. –

Смежные вопросы