base64 - 在 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 文件时显示此错误
解决方案
当你写二进制数据的时候,我认为你需要指定-nonewline,否则你会在二进制文件中有额外的换行符,数据会被破坏。
puts -nonewline $file2 $var3
推荐阅读
- stanford-nlp - 对于不同的词性,相同的词有不同的引理吗?
- c++ - 使用 GCC 编译 Win32 EXE 时 PE 大小和部分不正确
- git - 如何将大文件添加到 Git 存储库?
- mysql - 选择当前周,从星期一开始而不是星期日
- javascript - 在 React Native 中将本地图像上传到 Firestore 和 Firebase 存储时如何解决“文件名太长”?
- jakarta-mail - 我应该如何使用 JavaMail 和 AWS 发送邮件
- node.js - mongoose.find() 返回未定义
- javascript - 为什么我的异步函数在我的 React 组件中显得非常笨拙?
- tensorflow - ImportError:没有名为“numpy.testing.nosetester”的模块
- compression - 位压缩(13 位寄存器中的两个 8 位)