`

知识收集10【原创】压缩文件里面的中文文件名读取乱码问题解决方案

 
阅读更多

 最近,做了一个批量图片文件导入到系统中的功能,开始读取的时候,中文名的文件名,出现了乱码现象。

    首先我用了java自身提供的zip相关API进行读取的,出现乱码后,我对文件名进行了编码转换处理,依然还是乱码。

    根据我以往的经验,平常乱码的出现,往往是文件名的编码和系统中读取流的编码方式不一致造成的。

    于是,我查看了Windows系统下的编码方式:

    在Windows平台下,进入DOS窗口,输入:chcp


    可以得到操作系统的代码页信息

 

 

参考了活动代码页和字符集对照表:

 

    字符集是:GB2312

    所以,文件名的编码方式是GB2312

 

    接着,我看了公司系统的编码方式:

 

百度了一下这个JVM系统参数的含义:

    sun.jnu.encoding 影响文件名的创建

    file.encoding 则影响到文件内容。

从中,我们可以看到file.encoding=UTF-8

通过以上的查看和了解,我们接下来做一下乱码的分析:

    Java读取文件会自动使用当前Java编码环境进行读取压缩文件。

    存在两种存在的情况:

    1.JAVA环境的编码和上传到服务的文件名编码一致,文件名就显示正常

    2.JAVA环境的编码和上传到服务的文件名编码不一致,文件名就会乱码

通过结果分析,我们可以知道JAVA读取文件时使用的码制file.encoding=UTF-8

由于文件名的编码是GB2312,于是中文文件名乱码出现了。

知道了以上原因,那怎么解决呢?

    于是我考虑两种方案:

    方案一:在操作界面添加提示说明,文件名只能输入非中文形式,最后跟测试人员沟通,pass掉了

    方案二:就是修改操作系统的编码或者公司系统的编码,保持二者读取文件编码一致,但是这种改动对操作系统或者公司系统,影响都是太大,不可能改动。

    方案三:在后台获取文件名后,进行乱码的转换进行解决。这种方案,最后让测试采纳。

方案三解决起来并不容易,我用了Java自带的zip API没能实现编码的转换,于是又baidu了一下,发现ant.jar提供了这种编码的转换

    import org.apache.tools.zip.ZipEntry;

   import org.apache.tools.zip.ZipFile;

   ZipFile zipFile = new ZipFile(file,System.getProperty("sun.jnu.encoding"));

最终实现了中文名的乱码乱码转换,正常显示中文了。

    JVM启用的时候,如果没有特别设置字符集,会根据操作系统的字符集,设置默认的字符集。

分享到:
评论

相关推荐

    KODExplorer 芒果云-资源管理器

    - 选中文件时,移动到屏幕可视区域(解决上下左右选中文件滚动条不一致问题) ###ver2.51 `2014/6/22` ---- ####fix bug:(bug解决和程序优化) - 登陆多次密码输入错误验证码bug解决 - 修复漏洞:创建副本加入...

    asp.net知识库

    常见的 ASP.NET 2.0 转换问题和解决方案 Asp.Net2.0无刷新客户端回调 体验.net 2.0 的优雅(1) -- 异步WebService调用 ASP.NET 2.0页面框架的几点新功能 ASP.NET 2.0 中收集的小功能点 asp.net2.0中的webpart使用...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    每个实例都是经过笔者精心筛选的,具有很强的实用性,其中一些实例是开发人员难于寻觅的解决方案。 本书两卷共计1200个例子,包括了开发中各个方面最常用的实例,是目前市场上实例最全面的开发类图书;本书实例来源...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    每个实例都经作者精心筛选,具有很强的实用性,其中一些实例是开发人员难于寻觅的解决方案。   本书适合PHP的初学者,如高校学生、求职人员作为练习、速查、学习使用,也适合PHP程序员参考、查阅。 目 录 目录:...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    每个实例都经作者精心筛选,具有很强的实用性,其中一些实例是开发人员难于寻觅的解决方案。   本书适合PHP的初学者,如高校学生、求职人员作为练习、速查、学习使用,也适合PHP程序员参考、查阅。 目 录 目录:...

    PHP程序开发范例宝典III

    让你短时间内由一名菜鸟到高手绝对没问题! 由于权限有限,分3部份下载 PHP程序开发范例宝典 内容提要 《PHP程序开发范例宝典》全面介绍了应用PHP进行网站开发的各种技术和技巧。《PHP程序开发范例宝典》分为20章...

    C#编程经验技巧宝典

    2 <br>0003 设置程序代码行序号 3 <br>0004 开发环境全屏显示 3 <br>0005 设置窗口的自动隐藏功能 3 <br>0006 根据需要创建所需解决方案 4 <br>0007 如何使用“验证的目标架构”功能 4 ...

    易语言程序免安装版下载

    易语言5.1 相对于易语言5.0更新说明: ... 修改XML解析支持库,增加写出CDATA数据功能,解决解析XML时错误的丢弃换行和TAB字符的BUG,解决读取节点值时对CDATA数据进行转义处理的BUG。 20. 修改扩展界面支持库...

Global site tag (gtag.js) - Google Analytics