在servlet获取表单的值,打印输出的是问号

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在servlet获取表单的值,打印输出的是问号相关的知识,希望对你有一定的参考价值。

servlet关键代码
doPost方法里
response.setContentType("text/html;charset=gb2312");
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
String authority=request.getParameter("authority");
authority=authority==null?null:new String(authority.getBytes("ISO-8859-1"),"gbk");
System.out.println(authority);
表单代码
<td><input type="radio" name="authority" value="普通用户" checked="checked"/>普通用户
<input type="radio" name="authority" value="经理"/>经理
</td>

System.out.println(authority);打印输出 ?????

------------------------------------
在servlet里
response.setContentType("text/html");
request.setCharacterEncoding("gbk");

authority=authority==null?null:new String(authority.getBytes("ISO-8859-1"),"UTF-8");依然输出?????

请各位达人帮忙看下

有几种解决方案:
1,在出现编码的地方都统一用utf-8,这样类似new String(authority.getBytes("ISO-8859-1"),"gbk")这样的转码操作可以不用(servlet里,jsp或html里面都要检查一下);

2,其实你这种情况下市不需要用非英文字符的,radio类型的authority的value=“普通用户”或“经理”完全可以用"0","1"这些来代替,而ASCII字符在大多数编码里是一致的,从而可以规避乱码;

3,第三种方法可能是你想要的,据我判断,问题可能出在“表单代码”,你看看其编码是否是"ISO8859-1",否则转码是不对的。
有问题再联系
参考技术A response.setContentType("text/html;charset=gbk");
request.setCharacterEncoding("gbk");

出现问号 不用怀疑就是乱码的问题.在你的servlet种写上上面这两句话,然后还要在你的jsp页面顶上写上下面的一句就好了
<%@page pageEncoding="gbk" contentType="text/html;charset=gbk"%>

这样应该就没问题了,你先试试 .你不要再servlet中设置一堆编码方式,就用我上面的两句就好追问

改成你所说的还是一样的 又全部改成UTF-8 也是一样的

参考技术B 编码的问题,【authority=authority==null?null:new String(authority.getBytes("ISO-8859-1"),"gbk");】这句话不需要,提醒你一下,你用request进行接收的时候是使用UTF-8,响应的是gbk,要统一编码!response.setContentType("text/htm“);
response.setCharacterEncoding("UTF-8"); 改成这样就行!追问

改成 response.setCharacterEncoding("UTF-8"); 还是不行

参考技术C 乱码问题,你应该把所有页面用Servlet中的编码改成一致,或者你写一个过滤器,设置一下编码

以上是关于在servlet获取表单的值,打印输出的是问号的主要内容,如果未能解决你的问题,请参考以下文章

jsp表单提交中文插入数据库,数据库出现问号?

eclipse servlet 从控制台输出中文乱码(问号)是怎么回事

java 在jsp中怎样获取servlet中的数据

javaweb提交表单出现问号

python从数据库中获取utf8格式的中文数据输出时变成问号或乱码

jsp中如何获取servlet的值?