我们经常有用JAVA读取服务器上的文件的操作。比如对一个文件夹的所有文件重命名。
但是如果文件名包含中文,日文等文字的时候,可能读取的文件名是乱码,很多问号???。
那该怎么解决呢?
这还得先大致了解一下JAVA读取文件的原理。
JAVA读取文件是会自动用当前JAVA环境的encode对文件名进行读取。
如果JAVA环境的encode和服务器上的文件名的encode一致的话,就能够显示文件名。
但是如果JAVA环境的encode和服务器上的文件名的encode不一致的话,就会出现乱码。
JAVA中System.getProperties().list(System.out);执行的结果一览是JAVA环境的配置信息,这其中有file.encoding=UTF-8这个信息。
file.encoding就是JAVA读取文件时使用的码制。那么这个属性是什么时候设置的呢?这个属性是JAVA启动的时候,JAVA去寻找服务器系统的lang语言配置。默认是用系统的lang来设置的。
因此,服务器系统不一样,lang就可能不一样。所以JAVA去读取文件用的码制也不一样。
那怎么才能解决乱码呢?
试过用码制转换的方法,但没有效果。从上面的文件读取处理来看,JAVA没法解决这种乱码,看来只能从源头上来想办法了。就是保证服务器上的文件的文件名码制和系统lang一致。 lang例:lang=en_US.UTF-8
乱码解决的办法
消极的解决办法:操作的文件的文件名里面禁止用中文,日本等文字。只能用英文,数值等。这种方法在很多项目中都是采用的这种方法。这种办法的缺点是对母语不是英语的人来说不是那么亲切。还有就是有的系统中确实需要用自己的母语的情况。
积极的解决办法:从本地上传文件到服务器的时候,就对文件名进行码制转换。
比如本地是SHIFT—JIS,服务器是UTF-8。一般大多数服务器都是UTF-8。上传工具的可以对文件名进行UTF-8转换。比如WINSCP软件。转换后的文件名由于是UTF-8,所以能正常显示。解决了乱码问题。但这种办法的缺点就是要有系统操作人员去控制,操作指南里面必须写清楚。
那还有没有更好的办法呢?这个就得等高人来解答了。等待中。。。。。。。。。