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);
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
---- 服务器是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系统上,中文文件名就变成乱码了,怎么解决,求各位大侠帮忙解决。。。。
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);
把 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);
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
---- 服务器是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系统上,中文文件名就变成乱码了,怎么解决,求各位大侠帮忙解决。。。。
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);
把 uploadFile.getFileName()转一下编码
方法如下:String newStr = new String(uploadFile.getFileName().getBytes("gbk"),"utf-8");
FileOutputStream outer = new FileOutputStream("d:\\"
+ newStr);