Java读取linux系统中文文件名时候乱码,并显示文件不存在
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java读取linux系统中文文件名时候乱码,并显示文件不存在相关的知识,希望对你有一定的参考价值。
使用ava.io.File f = new java.io.File("/home/multiverse/Repository/PMEPGImport")的方式读取文件,如文件名称含有中文,则读取结果文件名称中文部分乱码,且显示文件不存在。
我试过设置:
System.setProperty("file.encoding","GBK");
System.setProperty("sun.jnu.encoding","GBK");
不起作用;
试过将文件名称进行如下转码:
String s0= new String(S.getBytes("UTF-8"),"GB2312");
String s1= new String(S.getBytes("GB2312"),"UTF-8");
String s2= new String(S.getBytes("ISO-8859-1"),"UTF-8");
String s3= new String(S.getBytes("UTF-8"),"ISO-8859-1");
String s4= new String(S.getBytes("ISO-8859-1"),"GB2312");
String s88= new String(S.getBytes("GBK"),"GB2312");
String s89= new String(S.getBytes("GB2312"),"GBK");
String s5= new String(S.getBytes("GB2312"),"ISO-8859-1");
String s6= new String(S.getBytes("GBK"),"UTF-8");
String s7= new String(S.getBytes("UTF-8"),"GBK");
String s8= new String(S.getBytes("GBK"),"ISO-8859-1");
String s9= new String(S.getBytes("ISO-8859-1"),"GBK");
都不起作用;
试过对tomcat的server.xml进行设置如下:
<Connector port=”8080″ protocol=”HTTP/1.1″ connectionTimeout=”20000″ redirectPort=”8443″ URIEncoding=”utf-8″ useBodyEncodingForURI=”true”/>
也不起作用;
还有试着将Linux的默认编码格式为中文,修改/etc/sysconfig/i18n里的编码格式,也是不起作用。
我上网问询,研究了1个多星期,实在是找不出解决办法,
今天部门老大提醒我从java代码new java.io.File()过程,或者file.listFiles()的过程,深度刨析其源码的方式寻找解决办法,我还没有做。
问题终于解决了,现在把方案共享一下:
解决此问题分两步
第一步,保证文件存到Linux磁盘上,文件名的编码格式是UTF-8。
使用“\\IP”方式访问Linux服务器,并上传文件是经过samba协议的,而samba协议默认的编码格式是“GB2312”,所以每次我们通过“\\IP”方式向linux服务器放文件的时候,文件名存在磁盘上就已经乱码了。所以要修改samba协议编码格式。方法是:
修改/etc/samba/smb.conf 文件为以下内容:
dos charset = GB2312
unix charset = UTF-8
display charset = UTF-8
修改完后重起samba服务。
第二步,保证tomcat服务器的编码格式是UTF-8。
通过在catalina.sh 启动脚本里加入
export LANG=zh_CN.UTF-8
重启tomcat就可以了。
方式应该是:OutputStreamWriter writer = new OutputStreamWriter(fop, "UTF-8");
InputStreamReader reader = new InputStreamReader(fip, "UTF-8");
这样还乱码?那就二进制读取就行了。
记得保证整个编译环境编码统一。追问
我们用的是File和FileInputStream,没有办法指定编码格式。
我们统一编码格式的做法是在catalina.sh里加入CATALINA_OPTS="-Dfile.encoding=UTF-8",这样file的编码格式就为UTF-8了。
现在怀疑是Linux系统没有安装中文语言包,造成乱码,还在验证中!
我们文件是手动放上去的,很难避免文件名中文的情况。
参考技术C 由于字符编码不一致,导致乱码,从而导致文件不存在。1,Linux字符编码一般都为utf-8。
2,编写java代码设置字符编码为utf-8。 参考技术D 亲,你的linux系统是是什么?ubuntu?可以加你qq吗?我也遇到了同样的问题。
linux系统如何更改字符集的支持,解决Linux中文显示乱码使centos显示中文
linux系统如何更改字符集的支持
怎么设置Linux系统中文语言,这是很多小伙伴在开始使用Linux的时候,都会遇到一个问题,就是终端输入命令回显的时候中文显示乱码。出现这个情况一般是由于没有安装中文语言包,或者设置的默认语言有问题导致的。咗嚛本经验以centos为例,操作Linux怎么查看语言,设置修改语言
主要是更改/etc/locale.conf文件。centos7之前的版本的配置文件为:/etc/sysconfig/i18n
查看当前系统语言
登陆linux系统打开操作终端之后,输入 echo $LANG可以查看当前使用的系统语言。如
查看安装的语言包
查看是否有中文语言包可以在终端输入 locale命令,如有zh cn 表示已经安装了中文语言
如果没有中文语言呢
可以通过网上下载安装中文语言包yum groupinstall chinese-support(不能联网的通过其他电脑下载,上传上去吧)
如何修改系统语言为中文
1 临时更换语言
如果只是临时更换linux系统的语言环境,可以通过输入设置 LANG=语言名称, 如中文是
Zn_CN.UTF-8(注意我这里本来就是中文的,我临时设置为英文
修改系统默认语言
以上方法是通过修改设置系统默认的语言配置
如Vi /etc/locale.conf(注意:执行source /etc/locale.conf或者之后重启一下系统)
其他注意事项
如果按照以上方法设置修改设置中文语言还是不行的话,注意您的链接终端选择的编码。
如xshell为例,把终端的编码选择中文,或者UTF8即可
本文出自 “挚爱Linux” 博客,请务必保留此出处http://mpflinux.blog.51cto.com/12173924/1946157
以上是关于Java读取linux系统中文文件名时候乱码,并显示文件不存在的主要内容,如果未能解决你的问题,请参考以下文章