VB.NET解码Base64编码Zip文件后保存出现损坏问题求解
Zip文件Base64编解码后损坏的解决方法
你的代码存在三个核心问题,导致Zip文件编解码后损坏:
- 用
StreamReader读取二进制Zip文件:StreamReader是为文本文件设计的,二进制Zip文件包含大量非ASCII字节,用它读取会导致数据丢失或错误转换。 - 使用
ASCIIEncoding处理二进制数据:ASCII仅支持0-127范围内的字符,Zip文件中超过该范围的字节会被替换为默认占位符(如?),彻底破坏原始数据结构。 - 用
StreamWriter写入二进制数据:StreamWriter用于写入文本内容,写入二进制数据时会再次因编码问题篡改字节。
修正后的代码
直接操作字节数组,避免文本编码转换:
' Encode: 读取Zip文件字节并转Base64 Dim base64encoded As String Dim zipBytes As Byte() = File.ReadAllBytes("E:\zip_test.zip") base64encoded = Convert.ToBase64String(zipBytes) ' Decode: 从Base64转回字节并写入文件 Dim decodedBytes As Byte() = Convert.FromBase64String(base64encoded) File.WriteAllBytes("e:\stcRepositorio\Entrena_To_Art\Enviar\testDEco.zip", decodedBytes)
说明
File.ReadAllBytes直接读取文件的原始字节数组,不会因编码丢失数据。Convert.ToBase64String和Convert.FromBase64String仅负责字节与Base64字符串的转换,不涉及任何编码转换,保证数据完整性。File.WriteAllBytes直接将字节数组写入文件,完全还原原始二进制数据。
内容的提问来源于stack exchange,提问作者chocano14
相关产品推荐
相关产品推荐

