Java上传文件至linux系统文件名乱码。

时间:2022-07-05 19:14:39
   linux系统: AIX
   JAVA使用的是GBK  服务器webshare
   
   问题现象:只是中文文件名乱码成?? 形式。文件里面的中文内容没有乱码

   问题补充:

   1.虽然上传上去的中文文件名是乱码, 但是可以通过Java程序根据文件名又下载下来,文件名存放到数据库是好的。


   2。linux的 locale信息:

   LANG=en_US
   LC_COLLATE="en_US"
   LC_CTYPE="en_US"
   LC_MONETARY="en_US"
   LC_NUMERIC="en_US"
   LC_TIME="en_US"
   LC_MESSAGES="en_US"
   LC_ALL= 
  3。我不想修改这些服务器上面的locale信息,因为还有其他程序需要部署到服务器上,(有没有一个方法指定Java程序使用一个特定的环境变量的字符?)

  各位大牛看看,唯独文件名乱码 很奇怪啊。当初也使用过 new(str,'字符编码格式')转过,但是不行 转过之后文件都不能正常处理。
   

13 个解决方案

#1


必须改LOCAL信息。

export LC_ALL=zh_CN.GBK
上传时还要注意设TOMCAT的server.xml

<Connector protocol="org.apache.coyote.http11.Http11Protocol"
           port="9090" minSpareThreads="5" maxSpareThreads="75"
           enableLookups="true" disableUploadTimeout="true" 
           acceptCount="100"  maxThreads="200"
           scheme="https"  URIEncoding="UTF-8"  useBodyEncodingForURI="true" secure="true" SSLEnabled="true"
           keystoreFile="conf/serverkey80.jks" keystorePass="111111"
     truststoreFile="conf/ca.jks" truststorePass="111111"
           clientAuth="false" sslProtocol="TLS" />

如果是csv在export时还要:
fos.write(0xFEFF); 

#2


不修改不行吗?局限性太大了吧。可以指定么? 服务器是webshare。

#3


这个是操作系统存文件时就出错了,web服务器找不到文件……重构成英文文件名或者拼音或者其他什么的吧。。。

#4


tomcat中的server.xml配置文件里改了么

#5


引用 4 楼 lxwankkk 的回复:
tomcat中的server.xml配置文件里改了么

---- 服务器是weshare 怎么要设置tomacat??

#6


哪个高手出来指点下吧。 现在客户必须要求满足中文。修改服务器的locale信息 风险太大了。能通过修改JAVA程序实现吗? 奇怪了 文件里面的内容不会乱码 生成文件名就乱码了。郁闷哇。

#7


AIX服务已经安装了支持中文的语言包了。

#8


你好,请问上面那个问题解决了么。,我也遇到这个问题了、

#9


我也到了这个问题,解决了没有啊。

#10


同求解该问题!

#11


我也遇到这个问题了,怎么解决啊。都郁闷死了。。。。。。。。。。。。。。

#12


peridenForm fileaciton = (peridenForm) form;
FormFile uploadFile = fileaciton.getUploadFile();
try {
FileOutputStream outer = new FileOutputStream("d:\\"
+ uploadFile.getFileName());  //在windows操作系统下d:\\形式/importexcel/
byte[] buffer = uploadFile.getFileData();
outer.write(buffer);
outer.close();
uploadFile.destroy();
} catch (Exception e) {
e.printStackTrace();
}
String path = "d:\\" + uploadFile.getFileName() + "";
本地没有问题,部署到linux系统上,中文文件名就变成乱码了,怎么解决,求各位大侠帮忙解决。。。。

#13


我好像找到解决方法了----
把 uploadFile.getFileName()转一下编码
方法如下:String newStr = new String(uploadFile.getFileName().getBytes("gbk"),"utf-8");
FileOutputStream outer = new FileOutputStream("d:\\"
 + newStr);

#1


必须改LOCAL信息。

export LC_ALL=zh_CN.GBK
上传时还要注意设TOMCAT的server.xml

<Connector protocol="org.apache.coyote.http11.Http11Protocol"
           port="9090" minSpareThreads="5" maxSpareThreads="75"
           enableLookups="true" disableUploadTimeout="true" 
           acceptCount="100"  maxThreads="200"
           scheme="https"  URIEncoding="UTF-8"  useBodyEncodingForURI="true" secure="true" SSLEnabled="true"
           keystoreFile="conf/serverkey80.jks" keystorePass="111111"
     truststoreFile="conf/ca.jks" truststorePass="111111"
           clientAuth="false" sslProtocol="TLS" />

如果是csv在export时还要:
fos.write(0xFEFF); 

#2


不修改不行吗?局限性太大了吧。可以指定么? 服务器是webshare。

#3


这个是操作系统存文件时就出错了,web服务器找不到文件……重构成英文文件名或者拼音或者其他什么的吧。。。

#4


tomcat中的server.xml配置文件里改了么

#5


引用 4 楼 lxwankkk 的回复:
tomcat中的server.xml配置文件里改了么

---- 服务器是weshare 怎么要设置tomacat??

#6


哪个高手出来指点下吧。 现在客户必须要求满足中文。修改服务器的locale信息 风险太大了。能通过修改JAVA程序实现吗? 奇怪了 文件里面的内容不会乱码 生成文件名就乱码了。郁闷哇。

#7


AIX服务已经安装了支持中文的语言包了。

#8


你好,请问上面那个问题解决了么。,我也遇到这个问题了、

#9


我也到了这个问题,解决了没有啊。

#10


同求解该问题!

#11


我也遇到这个问题了,怎么解决啊。都郁闷死了。。。。。。。。。。。。。。

#12


peridenForm fileaciton = (peridenForm) form;
FormFile uploadFile = fileaciton.getUploadFile();
try {
FileOutputStream outer = new FileOutputStream("d:\\"
+ uploadFile.getFileName());  //在windows操作系统下d:\\形式/importexcel/
byte[] buffer = uploadFile.getFileData();
outer.write(buffer);
outer.close();
uploadFile.destroy();
} catch (Exception e) {
e.printStackTrace();
}
String path = "d:\\" + uploadFile.getFileName() + "";
本地没有问题,部署到linux系统上,中文文件名就变成乱码了,怎么解决,求各位大侠帮忙解决。。。。

#13


我好像找到解决方法了----
把 uploadFile.getFileName()转一下编码
方法如下:String newStr = new String(uploadFile.getFileName().getBytes("gbk"),"utf-8");
FileOutputStream outer = new FileOutputStream("d:\\"
 + newStr);