您的位置:首页 > 编程语言 > Java开发

javaWeb中解决中文乱码问题

2015-10-04 10:46 549 查看
javaWeb中解决中文乱码问题。

网页传值主要有两种情况:

1、使用form表单传值

使用form表单传值只要有两种方式:get和post(即:method="get/post",默认是get方式)

1)解决使用post方式传递中文的乱码问题:

<form action="login-handler.jsp" method="post"></form>

在接受请求参数之前设置请求编码即可,request.setCharacterEncoding("编码");

<%

request.setCharacterEncoding("UTF-8");

String name = request.getParameter("name");

String pwd = request.getParameter("pwd");

%>

2)解决使用get方式传递中文的乱码问题:(两种方法)

<form action="login-handler.jsp" method="get"></form>

方法一:

对接受到的请求参数进行转码,使用String name = new String(name.getBytes("默认编码"),"转换后的编码");

<%

String name = request.getParameter("name");

name = new String(name.getBytes("ISO-8859-1"),"UTF-8");//将接收到的name参数的编码转换为UTF-8编码

%>

方法二:

客户端用户提交数据之前,使用JS把用户要提交的中文值进行编码,然后再服务器端对接收到的值进行解码即可。

客户端编码:

<script>

function login(){

var loginForm = document.forms["loginForm"];

loginForm.name.value = encodeURI(loginForm.name.value);//对中文字符串进行编码

return true;

}

</script>

<form action="login-handler.jsp" name="loginForm" onsubmit="login()" method="get"></form>

服务端解码:

<%

String name = request.getParameter("name");

name = URLDecoder.decode(name, "UTF-8");

%>

注意:使用encodeURI对字符串进行一次编码,再提交表单时又对字符串进行了一次的编码,实际进行了两次编码。在使用URLDecoder.decode()进行解码时,实际上是对字符串进行两次解码。

2、使用<a href=""></a>超链接的方式传值

在对a标签的href属性值编码时,要两次编码才能在服务端使用URLDecoder.decode()进行解码。

客户端编码:

<script>

function a(){

var doc = document.getElementById("aa");

doc.href = "a-handler.jsp?info="+encodeURI(encodeURI("你好"));

}

</script>

<a href="" id="aa" onclick="a()">使用超链接传送中文参数</a>

服务端解码:

<%

String user = request.getParameter("info");

user = URLDecoder.decode(user, "UTF-8");

out.println(user);

%>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: