SWFUpload是一款使用Flash和Javascript開發的文件上傳工具,最近在使用其實現文件上傳功能時,發現從後臺返回的中文常常亂碼。
java
SWFUpload上傳成功後,對後臺返回結果的處理方法是:ide
function uploadSuccess(file, serverData) { ...... }
其中file是上傳文件信息,serverData是從後臺返回的數據。咱們發現serverData中的中文出現亂碼。然後臺處理圖片上傳的Struts2 Action類返回時的代碼以下:工具
servletResponse.getOutputStream().println(serverData);
後來發現就是上面這個地方出了問題。以前使用的是ServletOutputStream字節流的println方法,這個方法會將serverData字符串按照默認編碼轉化爲字節流,而SWFUpload使用的是UTF-8編碼,從而致使編碼不一致,引發中文亂碼。編碼
後來想了兩個解決方法:server
1)對於字節流,手工對serverData按照UTF-8進行編碼,並採用write方法輸出字節流;圖片
servletResponse.getOutputStream().write(serverData.getBytes("UTF-8"));
2)採用字符流,並指定字符流的編碼爲UTF-8。ip
servletResponse.setCharacterEncoding("UTF-8"); servletResponse.getWriter().print(serverData);