修改前:
压缩之前进行的编码设置:
结果:
下载解压后的结果乱码,是因为在测试时,判断始终是进入windows的编码,没有获取正确的编码环境
修改后:
一、获取输出流:
二、设置压缩包文件的文件名字符编码,解决从linux上打包文件后下载文件编码乱码问题,主要用以下编码设置:new String(zipName.getBytes("gb2312"), "iso-8859-1")
三、选择文件压缩格式
在linux下压缩格式:
Zip:不支持自动转码,需要手动设置转码
四、在不确定服务器的环境之前,判断服务器的环境:
五、设置编码
根据不同的操作系统进行设置字符编码:
Linux的字符编码:utf-8
Windows的字符编码:gbk
从Linux操作系统下载文件到windows系统,需要保持编码的一致性
五、压缩
此次上线服务器系统:aix(其底层就是Linux),需要对其压缩包下的每一个文件进行编码设置,在压缩文件文件个数不为空且操作系统是aix的时候,对每个文件的文件名进行编码设置(zip是压缩包下的每个文件,此处省略了for遍历),linux下文件乱码的编码设置:zipEntry.setUnixMode(644)
其中zos.putNestEntry(zipEntry)是在文件写入之前的准备,但是不是真正的写入文件,如果此处不写后面的文件下载为空。
六、zos编码设置(因为服务器系统为aix,其字符编码是utf-8,为匹配客户端操作系统,设置字符编码为:gbk)
结果:
解决思路:
1、首先判断服务器的环境,确定服务器的操作系统后,确定服务器的字符编码
2、选择合适的压缩格式(rar、zip等)
3、确定了字符编码后,需要确定用户环境的系统编码和生产环境的字符编码是否相同,根据选择的压缩格式进行对应字符编码的设置
A、本系统生产环境时aix(其底层编码utf-8),windows字符编码时gbk
B、设置在生产环境下对应的编码
C、对要压缩的文件进行遍历,对每个文件进行编码操作无论服务器是linux操作系统还是windows操作系统,都进行了相适应的编码设置,以至于,在windows操作系统下压缩下载,也不会出现乱码问题(在生产时分别在linux和windows操作系统性测试过,均不乱码)