用jsp写的网页 怎么在传递参数时包含中文?

jsp中<%@pagecontentType="text/html;charset=gb2312"%><ahref="CartServlet?action=search&... jsp中
<%@ page contentType="text/html;charset=gb2312" %>
<a href="CartServlet?action=search&cname=<%= st %>"><%= st %></a>
在Servelt中

request.setCharacterEncoding("gb2312");
response.setContentType("text/html;charset=gb2312");
response.setCharacterEncoding("gb2312");

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

拿到的cname是一堆乱码?

怎么解决?谢谢了》、?最好不用过滤器~
展开
 我来答
littleatp
2011-06-21 · TA获得超过852个赞
知道小有建树答主
回答量:307
采纳率:100%
帮助的人:380万
展开全部
request.setCharacterEncoding设置了用gb2312去转码了,这里是不会有什么问题的;关键看看你的页面..
页面用的是超链接,超链接采用的是get的方式进行请求,而参数部分如何发送给服务端取决于浏览器及相关设置:
IE中uri使用UTF8进行转义,后半部分用UTF8编码
FireFox则使用页面编码进行转义
所以你试试在FireFox打开看看,是否可以正常获取了?
彻底解决问题的话,超链接的uri和参数部分不要直接带中文
在cname=<%= st %>"> 里面的st先编码一下
st = URLEncoder.encode(st,"gb2312"); ---转变为%&*&(^&这种不可读的东西,查看页面源代码也可以看到。
此后浏览器发送请求时进行编码转义将不会做任何处理(不存在中文等特殊字符),于是服务端可以得到正确的gb2312转义过的字符信息了。
追问
哦 我这个在Servelt中 使用cname 来构建sql语句 结果cname是 %CB%AE%B9%FB 
而 mysql用的是GB2312 那能不能吧那一堆乱码转换回中文呢? 刚开始学jsp到处是问题~~谢谢了哈
追答
这堆不是乱码,是转义后的编码;
转回中文也类似的做法:URLDecoder.decode(str,"gb2312")
wu1g
2011-06-21 · 超过28用户采纳过TA的回答
知道答主
回答量:111
采纳率:0%
帮助的人:65.7万
展开全部
get取中文很多时候都会出现中文乱码的,一个笨方法不用get,所有值用表单提交,这种是绝对不会出现中文乱码的,给你的例子

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>test</title>

</head>
<body>
<form name="frm">
<input type="hidden" name="test1" />
<input type="hidden" name="test2" />
</form>
<a href="javScript:down('测试1','测试2');" >【测试】</a>

</body>
</html>
<script type="text/javaScript" language="javaScript">
function down(obj1,obj2){
document.getElementByName("test1").value=obj1;
document.getElementByName("test2").value=obj2;
document.frm.method="post";
document.frm.action="<%=basePath + "test.do"%>";
document.frm.submit();
}
</script>
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
caesar1800
2011-06-21 · 超过25用户采纳过TA的回答
知道答主
回答量:82
采纳率:0%
帮助的人:79.2万
展开全部
传之前先转换下参数的编码st=URLEncoder.encode(st,"gb2312");
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式