文件上传到linux服务器 文件名为乱码
我在windows系统 用fileupload上传包含中文文件名的文件,
上传到linux服务器后文件名为乱码。
我用乱码字符串做 GBK转UTF-8可以变为正常
原本想在上传后先用程序重命名一遍UTF-8转GBK的文件名,但是出现了另外一种乱码。
请教知道这个问题的解决方法或原因,谢谢。
另外我用程序创建一个文件也会出现这种乱码。
你的shell的编码字符集呢?为啥乱码是你想要的。。。。。可以先把shell设置成utf-8再看看 你java传上去的竟然还是GBK的。。。太假了
commons-fileupload?windows默认的字符集是GBK或GB2312,inux默认utf-8
一般上传的时候设置下字符集 setHeaderEncoding("UTF-8");
这问题我在aix系统下也遇到过,至今没有解决。
保存文件之前需要对文件名进行编码转换。
[code="java"]
//假设 filename 为得到的上传文件名
String newFilename = new String(filename.getBytes("GBK"), "UTF-8");
File newFile = new File(newFilename);
//然后将流写入 newFile
[/code]
[quote]
我用乱码字符串做 GBK转UTF-8可以变为正常
原本想在上传后先用程序重命名一遍UTF-8转GBK的文件名,但是出现了另外一种乱码。
[/quote]
你是做了两次编码吗?
还有,你 Linux 系统的编码是不是 UTF-8 ?
你的linux系统的编码是什么格式? 在代码里有输出过文件名 正常的么?
= = 这个真莫名 那你用来上传文件的java代码文件的编码格式呢?utf-8的么
这个应该是和系统相关的,因为我同样在Windows下就没有这种情况。我也经过多番的转换编码也是没有作用。常用的编码也就那么几种,怎么转换也应该可以的,我觉得造成乱码的另有原因。
我在Spring的配置文件中做了如下配置,现在可以了
2048000
2048
UTF-8
肯定还有哪里没考虑到。。。。。web服务器的字符集呢?
兄弟你是不是用ssh连接过去的,有可能是你ssh的客户端编码导致你看到的是乱码,实际不是啊,还有就是打印出来的也有可能,你这问题我以前经常见啊,都能解决的,在代码中调试就行。
你用的Commons-fileupload嘛,我用的是SpringMVC带的MultipartResolver。
FTP 的话,现在有很多客户端都支持自动检测 UTF-8 的:如果服务器端支持 UTF-8,则上传文件时自动转换文件名。
其实最好的方法是调试。下几个断点分别看看接收文件时的文件名、编码后的文件名、写入磁盘后的文件名。
weblogic则是在weblogic.xml里
jboss在server/default/deploy/jbossweb.sar/server.xml里
不知道管不管用。。。。
[quote]if(item.getFieldName().equals("picpath")){
upload = item.getName();
if (upload.length()>0) {
fileName = upload.substring(upload.lastIndexOf("\")+1,upload.length());
temfile = new File(tarpath+filenametemp+"/zip/"+fileName);
item.write(temfile); [/quote]
temfile 的文件名是什么?输出来看看
我用的是ModelAttribute,写一个Model,里面有MultipartFile类型的变量。代码在家里的电脑里面,没法发给你。
你是怎么创建的,文件名是从浏览器输入的还是怎么赋的文件名
。。。。。还没搞定
是不是linux支持的字符集的问题,按道理utf-8支持就ok了的啊。。。linux服务器啥系统啊
那就怪了,我的代码直接创建文件却不是乱码,你怎么查看到服务器上的文件的.通过Telnet还是ssh客户端看的.
我曾经用Xshell连接Linux,看到里面的中文文件名为乱码,我以为服务器出问题了,去找公司配置人员,人家改了一下Xshell的字符集就ok了.
[quote]sqliconv: illegal input sequence at position 3
tomcat@Staging ~/webapps/CommonManagerPlatform/temptar2/eb19dbf9-476d-4797-98d7-b89139514434/files $ iconv -f gbk -t utf-8 sql查询语句.txt
sql查询语句.txt [/quote]
。。。。。这是什么情况,这不是说明你sql查询语句.txt是GBK的么。。。。不过你文件名在shell里不是正常的么 奇怪
你看看是不是你的 SecureCRT 里面的字符集没胡设置好?如果 server 是 utf-8 的话,SecureCRT 里面也必须是 utf-8。我平时使用的是 putty, 需要设置 utf-8 的。
你一直犯了一个很大的错误:
[quote]如下是我转吗的语句和结果
iconv -f utf-8 -t gbk sql查询语句.txt
sqliconv: illegal input sequence at position 3 这时出现了问题(可能说明我写到服务器的文件转码的时候出错了)
iconv -f gbk -t utf-8 sql查询语句.txt
sql查询语句.txt [/quote]
你这个命令是用 iconv 转换 sql查询语句.txt 文件的 [b][u]内容[/u][/b],而不是文件名。根据错误提示,说明该文件内容是GBK码的。
文件名显示是正确的啊,说明问题不在文件名这里