9-11 2,263 views
SWFUpload是一款使用Flash和Javascript开发的文件上传工具,最近在使用其实现文件上传功能时,发现从后台返回的中文经常乱码。
SWFUpload上传成功后,对后台返回结果的处理方法是:
1 2 3 |
function uploadSuccess(file, serverData) { ...... } |
其中file是上传文件信息,serverData是从后台返回的数据。我们发现serverData中的中文出现乱码。而后台处理图片上传的Struts2 Action类返回时的代码如下:
1 |
servletResponse.getOutputStream().println(serverData); |
后来发现就是上面这个地方出了问题。之前使用的是ServletOutputStream字节流的println方法,这个方法会将serverData字符串按照默认编码转化为字节流,而SWFUpload使用的是UTF-8编码,从而导致编码不一致,引起中文乱码。
后来想了两个解决方法:
1)对于字节流,手工对serverData按照UTF-8进行编码,并采用write方法输出字节流;
1 |
servletResponse.getOutputStream().write(serverData.getBytes("UTF-8")); |
2)采用字符流,并指定字符流的编码为UTF-8。
1 2 |
servletResponse.setCharacterEncoding("UTF-8"); servletResponse.getWriter().print(serverData); |