解决中文乱码,需要再接收端和发送端同时保证编码一致,都使用国际标准的utf-8。
常用设置如下:
1. 接收端设置HttpServletRequest编码如下:
request.setCharactorEncoding("utf-8")
2. 发送端设置StringPart的编码如下,使StringPart中文正确解码。
StringPart:setCharSet("utf-8")
这样设置可以解决常见的乱码问题。今天遇到一个诡异的问题,就是接收端和发送端编码设置一致,但是FilePart的文件名还是出现了中文乱码问题。这是由于FilePart在写入文件部分数据时,强制使用ascii编码导致。解决方法是继承FilePart,并重写sendDispositionHeader方法。代码如下:
public class CustomFilePart extends FilePart
{
public CustomFilePart(String name, File file) throws FileNotFoundException
{
super(name, file, null, "utf-8");
}
protected void sendDispositionHeader(OutputStream out)
throws IOException {
String filename = getSource().getFileName();
out.write(CONTENT_DISPOSITION_BYTES);
out.write(QUOTE_BYTES);
out.write(EncodingUtil.getBytes(getName(),"utf-8"));
out.write(QUOTE_BYTES);
if (filename != null) {
out.write(EncodingUtil.getAsciiBytes(FILE_NAME));
out.write(QUOTE_BYTES);
out.write(EncodingUtil.getBytes(filename, "utf-8"));
out.write(QUOTE_BYTES);
}
}
}
网友评论