Java读取linux系统中文文件名时候乱码,并显示文件不存在 20

使用ava.io.Filef=newjava.io.File("/home/multiverse/Repository/PMEPGImport")的方式读取文件,如文件名... 使用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就可以了。
展开
 我来答
whscfan
推荐于2018-03-02
知道答主
回答量:32
采纳率:0%
帮助的人:20.9万
展开全部
我记得InputStreamReader和OutputStreamWriter不是可以设置编码的吗?
方式应该是: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系统没有安装中文语言包,造成乱码,还在验证中!
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友c2ac8041
2014-02-18 · TA获得超过880个赞
知道小有建树答主
回答量:468
采纳率:100%
帮助的人:262万
展开全部
同学,这个很麻烦的,大哥解决方案就是存文件加码,取文件解码。用base64这个东西,你可以百度一下。然后在linux下就不存在有中文文件了。
追问
我们文件是手动放上去的,很难避免文件名中文的情况。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jiaozi95
推荐于2016-01-31 · TA获得超过1685个赞
知道小有建树答主
回答量:1648
采纳率:100%
帮助的人:417万
展开全部
由于字符编码不一致,导致乱码,从而导致文件不存在。
1,Linux字符编码一般都为utf-8。

2,编写java代码设置字符编码为utf-8。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
爱乐客
2014-12-18 · 超过11用户采纳过TA的回答
知道答主
回答量:30
采纳率:0%
帮助的人:22万
展开全部
亲,你的linux系统是是什么?ubuntu?可以加你qq吗?我也遇到了同样的问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式