因为浏览器页面的编码以及服务器设置的页面编码还有编译器的编码问题,其实我也不是很理解这里的关系。
只是通常因为很多编码默认是英文,如果用中文,就需要设置,以防止乱码。
如果页面有一个输入框,比如用户名输入,输入中文,哪怕你jsp页面里设置contentType="text/html; charset=utf-8"。服务器处理时就可能变成乱码.甚至直接报错。
设置浏览器的编码为 utf-8.还有报错。不知道页面的数据传入到服务器到底是什么流程。
(浏览器编码应该只是显示时的编码,和传入到服务器的编码无关;jsp里设置的就只是告诉编译器应该用什么编码。也和接收的数据编码无关,也不是自己代码本身的编码??)
解决方法就是接受数据时处理成utf-8:
String username = URLEncoder.encode(request.getParameter("username"),"utf-8");
用户名username就可以输入中文了。
编码方法URLEncoder.encode( , )第一个参数是要处理的字符串,第二个参数是,要使用的编码格式。
但是在用这个方法之前,要先使用:
request.setCharacterEncoding("utf-8");
而且要导入包:
<%@ page language="java" import="java.util.*,java.net.*" contentType="text/html; charset=utf-8"%>
输入时有转码,输出时也需要解码:
Cookie[] cookies = request.getCookies(); if(cookies!=null&&cookies.length>0) { for(Cookie c:cookies) { if(c.getName().equals("username")) { username = URLDecoder.decode(c.getValue(),"utf-8"); } if(c.getName().equals("password")) { password = URLDecoder.decode(c.getValue(),"utf-8"); } } }
这里是获取cookie的值并输出