Base64 在TCL中将txt文件转换为zip文件

Base64 在TCL中将txt文件转换为zip文件,base64,tcl,Base64,Tcl,我使用其他代码将zip二进制文件转换为base64 txt文件。现在我想使用下面的代码将base64 txt文件转换回zip文件。但由此产生的zip文件显示错误。我怎样才能解决这个问题 proc b64en str { set bits $str set tail {} return [string map { A 000000 B 000001 C 000010 D 000011 E 000100 F 000101 G 000110 H 000111 I 001000

我使用其他代码将zip二进制文件转换为base64 txt文件。现在我想使用下面的代码将base64 txt文件转换回zip文件。但由此产生的zip文件显示错误。我怎样才能解决这个问题

proc b64en str {
set bits $str 
set tail {}
return [string  map {
    A 000000 B 000001  C 000010  D 000011 E 000100 F 000101 
    G 000110 H 000111 I 001000 J 001001 K 001010 L 001011 
   M 001100 N 001101 O 001110 P 001111 Q 010000 R 010001 
   S 010010 T 010011 U 010100 V 010101 W 010110 X 010111 
   Y 011000 Z 011001 a 011010 b 011011 c 011100 d 011101 
   e 011110 f 011111 g 100000 h 100001 i 100010 j 100011 
   k 100100 l 100101 m 100110 n 100111 o 101000 p 101001 
  q  101010 r 101011 s 101100 t 101101 u 101110 v 101111 
   w 110000 x 110001 y 110010 z 110011 0 110100 1 110101 
   2 110110 3 110111 4 111000 5 111001 6 111010 7 111011 
    8 111100 9 111101 + 111110 / 111111 
} $bits]$tail   
}
proc callme {file1 file2} {   
set file1 [open $file1 r]
set file2 [open $file2 w+]
fconfigure $file2 -translation binary 
fconfigure $file1 -buffering line  
while {[gets $file1 data]>=0} {      
   set var $data
   set nvar [string trimright $var = ]
   set nvar [string trimright $nvar = ]
   set var2 [b64en $nvar]
   set var3 [binary format B* $var2]
   puts $file2 $var3    
}
close $file1
close $file2
}
set fp1 [lindex $argv 0]
set fp2 [lindex $argv 1] 
callme $fp1 $fp2
上面的代码是用于txt到txt文件的 请帮帮我。 谢谢

在编写二进制数据时,我认为需要指定-nonewline,否则二进制文件中会有额外的换行符,数据将被损坏

puts -nonewline $file2 $var3

也许您想使用一些zip和base64 tcllib模块:请参阅,Tcl 8.6同时支持base64和压缩。不是完整的zip,而是zlib算法核心,使其余的都“微不足道”。但是如果可能的话,我会调用一个外部
zip
程序,因为我很懒。