博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jsp连接数据库的乱码问题 servlet请求参数编码处理get post
阅读量:7071 次
发布时间:2019-06-28

本文共 1816 字,大约阅读时间需要 6 分钟。

1.在所有需要读取数据的地方用下面的方式。同时jsp必须统一编码,如我都是UTF-8

String userName= new String(request.getParameter("userName").getBytes("ISO-8859-1"),"utf-8");

插入数据库的也需要先转换再插入。

上面句子的意思是:把name的值用“ISO-8859-1”字符集获取他的字节,“name.getBytes("ISO-8859-1")”这里面返回的是一个ISO-8859-1的字节数组,最后创建一个String对象,在把它赋值给name;

即就是字符编码转换,把字符集转换成用UTF-8编码的字节码。

ISO-8859-1:是国际字符集之一,比如我们常用的UTF-8和GBK等都是的。

2 上面之所以能解决的原理是:一般浏览器使用的是uTF-8处理字符(可通过网页右击--编码来查看),而WEB容器默认使用ISO-8859-1编码。

这样的话客户端使用UTF-8发送非ASCII字符的请求参数(如果请求参数是ASCII字符,没什么问题,因为都是按一个字节的编码处理,是兼容的,但是中文不同编码方式处理不同),servlet直接使用getParameter()等方法取得该请求参数时就会乱码。

举例,假设网页编码是UTF-8,通过窗体使用post发送“林”这个这个中文字符,相当于浏览器做了这个操作:

String text =java.net.URLEncoder.encode("林" ,“UTF-8”);(编码后为%e6%9e%97)

在Servlet 中取得请求参数时,容器默认使用ISO-8859-1来处理编码,相当于做了这个操作:

String text =java.net.URLEncoder.decode("%e6%9e%97" ,“ISO-8859-1”);自然显示的就不对了。

那该怎么办呢?

下面是servlet的get请求和post请求的不同处理:

 

jsp文件统一都是UTF-8

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        // TODO Auto-generated method stub        //get处理编码的方式        String name = req.getParameter("username");        name = new String (name.getBytes("ISO-8859-1"),"UTF-8"); //合在一起就是String name= new String(request.getParameter("username").getBytes("ISO-8859-1"),"utf-8");.....}

 

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        // TODO Auto-generated method stub        //post处理编码的方式        req.setCharacterEncoding("UTF-8");        String name = req.getParameter("username");。。。。}

 

 

 

2 sql server 2008数据库默认是GBK编码。

查看SQLserver编码格式的SQL语句 :

SELECT  COLLATIONPROPERTY('Chinese_PRC_Stroke_CI_AI_KS_WS', 'CodePage')

下面是查询结果:
936 简体中文GBK
950 繁体中文BIG5
437 美国/加拿大英语
932 日文
949 韩文
866 俄文
65001 unicode UFT-8

默认都是936即 简体中文GBK

转载地址:http://xphll.baihongyu.com/

你可能感兴趣的文章
PMP考试
查看>>
Android之底部TabHost实现
查看>>
python__系统 : socket_TCP相关
查看>>
(转载)解决“指定的服务已经标记为删除”问题
查看>>
mui重写移动端返回键-连续点击退出页面
查看>>
【每天一道算法题】字符串查找
查看>>
算法练习(十一)
查看>>
关于String类的课后验证
查看>>
Kali 2017.1设置滚动更新源
查看>>
桶排序
查看>>
字符串(二):string
查看>>
package.json与package-lock.json的区别
查看>>
[精品]CAD批量处理工具
查看>>
关于main函数的定义
查看>>
链接<a href="javascript:void(0)" />
查看>>
会议记录
查看>>
jquery php ajax 表单验证
查看>>
vue复选框获取值的补充
查看>>
关于在获取数据后对数据用forEach进行处理的认知
查看>>
n皇后问题,状态压缩
查看>>