在tomcat中使用httpclient3.1来传文件到后台(后台是用cxf发布webservice服务,在jboss上运行),的时候,中文文件名会一直出现乱码问题,,在网上搜了一些资料之后(参考:
commons.httpclient上传文件的文件名的中文问题),继承FilePart类重新写了sendDispositionHeader方法:
protected void sendDispositionHeader(OutputStream out)
throws IOException {
LOG.trace("enter sendDispositionHeader(OutputStream out)");
super.sendDispositionHeader(out);
String filename = this.source.getFileName();
if (filename != null) {
out.write(FILE_NAME_BYTES);
out.write(QUOTE_BYTES);
out.write(EncodingUtil.getAsciiBytes(filename));
out.write(QUOTE_BYTES);
}
}
把out.write(EncodingUtil.getAsciiBytes(filename));修改为
out.write(EncodingUtil.getBytes(filename, "utf-8"));
然后发现后台接收文件的时候能接收到中文名字了..但是只能是某些中文,,有一些中文会出错..感觉很怪异..
继续谷哥~~~后来又看到一篇文章说java中的编码和java无关,因为都是unicode码,但是和java平台有关,比如操作系统,应用容器等等,
then...把编码改成GBK.和接收请求的时候设置 request.setCharacterEncoding("GBK");
在new FilePart的时候指定GBK编码:
FilePart filePart = new CustomFilePart(uploadFile.getName(), uploadFile, null, "GBK");
上面那句out改为:
<pre name="code" class="java">out.write(EncodingUtil.getBytes(filename, getCharSet()));
后台顺利接收中文名文件Done!!!