Servlet乱码如何解决?
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String FilePath = this.getServletContext().getRealPath("/Template/notice.html");
String Content = new String(FileCls.readFile(FilePath,"UTF-8").getBytes("ISO8859-1"),"UTF-8");
out.print(Content);
}
读文件的类:
public class FileCls {
public static String readFile(String filename,String Encoder){
String read;
String readStr = "";;
try {
BufferedReader bufread=new BufferedReader(new InputStreamReader(new FileInputStream(filename),Encoder));
while ((read = bufread.readLine()) != null) {
readStr = readStr + read+ "\r\n";
}
} catch (IOException e) {
e.printStackTrace();
}
return readStr;
}
}
模板文件都是用的UTF-8,META信息也设置为UTF-8了,是哪里写得有问题?
------解决方案--------------------你用myeclipse了吧,编码应该是GBK的,所以你这个属于请求时乱码了,后面就越改越乱了,内容设置那个改一下,改成: String Content = new String(FileCls.readFile(FilePath,"GBK")); 应该就可以了,没必要在后面再进行转码了
------解决方案--------------------java常见乱码总结推荐:
http://blog.csdn.net/zhangao0086/article/details/6240379
------解决方案--------------------这个应该是多次转码的问题
------解决方案--------------------修改server.xml 加上 URIEcoding = "UTF-8" 试试
------解决方案--------------------乱码的问题的一直都是一个很头疼的问题 多遇到几次 搞习惯了 就好了
------解决方案--------------------
首先打印:System.out.println("编码格式为:"+java.nio.charset.Charset.defaultCharset()); 看看你到底是什么编码格式 如果不是UTF-8 如下设置一下
你打开我的电脑-高级-环境变量-系统变量 设置一下
变量名:JAVA_TOOL_OPTIONS
变量值:-Dfile.encoding=UTF-8
变量值可根据你的编码改变你计算机的根本编码格式
设置后需要重启电脑才能生效