首页 > 解决方案 > 在 TCL 中将 txt 文件转换为 zip 文件

问题描述

我使用其他代码将 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 文件,请帮助我。感谢 在打开生成的 zip 文件时显示此错误

标签: base64tcl

解决方案


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

puts -nonewline $file2 $var3

推荐阅读