关于get传递参数乱码及长度为奇数时最后一个字符乱码的问题
JSP中文传参数乱码问题。
X:\Tomcat \conf\Server.xml?? ?

在文本框中输入'世界',?毫无疑问这个时候在servlet中得到的name的值是乱码 例如:name = ????
(2)现在再把form中的method方法换成post并且仍然是在web.xml中没有字符集转换的filter下,看在表单中提交中文会不会有乱码,HTML片段如下
?
?在文本框中输入'世界',?这个时候在servlet中得到的name的值仍然是乱码 例如:name = ????
(3)现在在web.xml中加入字符集转换的filter,代码如下
?
- ?

- ?

- ?

?然后在servlet中得到的仍然是乱码,仍然需要(6)中介绍的方法进行转换,才能得到正确的值。
(8)通过post方法提交的表单中的中文值是不需要通过(6)中的进行转码的,如果进行转码的话,反而会造成乱码。那么,在serlvet中,如果让这两种提交方式(超链接提交和表单post方法)都通用的话,如果超链接的值没有中文的话是可以实现通用的,如果超链接提交的参数有中文的话,就会出现问题,那么就必须在超链接提交的URL中另加一个额外的参数来标识是从哪里提交的,以此来决定是否需要对特定的值进行转化。有没有更好的办法在超链接里提交中文时候在servlet中不进行转码呢。答案就是(5)。如果把超链接提交转化为表单的post提交,中文就不会出现乱码,见(9)
(9)
?
- ?

- target="frameset">Xls表数据管理 </a>
假如是java代码的话直接写java.net.URLEncoder.encode("测试吗","UTF-8");
下面引用Qieqie的一段代码:
public static void main(String[] args) throws UnsupportedEncodingException {//给定某3个汉字String src = "你好啊";//String src = "一二三";//浏览器进行utf-8编码,并传送到服务器byte[] bytes1 = src.getBytes("utf-8");System.out.println(bytes1.length);//9//tomcat以gbk方式解码(这个片段的说明仅针对gbk处理汉字的情况)//如果一对汉字字节不符合gbk编码规范,则每个字节使用'?'(ascii 63)代替//万幸的话,只是最后一个(第9个)字节因不能成对,变成问号(比如当src="你好啊"时)//不幸的话,中间某些字节就通不过gbk编码规范出现'?'了(比如当src="一二三"时)//总之temp的最后一位必定是问号'?'String temp = new String(bytes1, "gbk"); //你的action中的代码//由于以上的tomcat以gbk解释utf-8不能成功//所以此时bytes2和bytes1不一样byte[] bytes2 = temp.getBytes("gbk");System.out.println(bytes2.length);for (int i = 0; i < bytes1.length; i++) {System.out.print(bytes1[i] & 0xff);System.out.print("\t");}System.out.println();for (int i = 0; i < bytes2.length; i++) {System.out.print(bytes2[i] & 0xff);System.out.print("\t");}System.out.println();//构建出来的dest自然不是原先的srcString dest = new String(bytes2, "utf-8");System.out.println(dest);}?
