工作总结11 压缩文件里面的中文文件名读取乱码问题解决方案
2014-04-21 19:07
465 查看
最近,做了一个批量图片文件导入到系统中的功能,开始读取的时候,中文名的文件名,出现了乱码现象。
首先我用了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启用的时候,如果没有特别设置字符集,会根据操作系统的字符集,设置默认的字符集。
首先我用了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启用的时候,如果没有特别设置字符集,会根据操作系统的字符集,设置默认的字符集。
相关文章推荐
- Java文件名包含中文的文件压缩后文件名乱码问题,完美解决方案
- Java文件名包含中文的文件压缩后文件名乱码问题,完美解决方案
- Java ZIP压缩和解压缩文件(解决中文文件名乱码问题)
- Linux下如何解压rar、zip格式文件?Linux VPS安装7zip/使用方法/压缩解压中文文件名乱码解决方案
- Nodejs下载文件文件名中文乱码问题解决方案
- 工作问题:http下载文件,中文文件名在firefox下乱码问题
- Java压缩解压zip文件的中文文件名在Windows和Linux环境下乱码问题的解决方案
- Java ZIP压缩和解压缩文件(解决中文文件名乱码问题)
- NodeJS读取windows下文件中文乱码的问题
- php file_get_contents读取远程文件的乱码问题(gzip压缩引起的)
- c# winForm使用Aspose.Cells读取CSV文件中文乱码问题
- 解决PHP在IE浏览器下载文件,中文文件名乱码问题
- Andoird - 解决读取txt文件中文乱码问题
- 如何解决 Ubuntu 中文乱码问题——文本、MP3和Rar压缩文件及aMule
- Java读取properties文件中文乱码问题解决
- 如何解决ASP.NET下载时的中文文件名乱码,与TXT文件中存在代码两个问题
- 文件下载(解决中文文件名下载乱码问题) 收集
- 解决生成的saiku文件读取中文乱码的问题
- java读取文件中文乱码问题
- Ant 执行 YUICompressor 任务压缩 JavaScript 和 CSS 文件,解决中文乱码问题,增加源文件字符编码集设定