代码编织梦想

问题

在我们通过JavaWeb写登录注册页面时,初学者总会遇到一个细节问题,那就是字符编码问题。(由于写Java的创始人并不是中国人,所以默认不是utf-8编码,所以我们需要将编码转换为utf-8字符集),因此我总结了两个角度来处理编码问题,希望能为大家带来帮助。

角度一(接收数据时处理)

如下图为注册表单的处理代码(jsp代码)
代码部分(未解决前)
本代码造成了以下后果(即接收到的中文数据为乱码,导致添加到数据库中的中文数据为也乱码)
运行结果(为解决前)
追其根源,问题出在了下边这段代码

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

1.错误原因

Http请求传输时将url以ISO-8859-1编码,服务器收到字节流后默认会以ISO-8859-1编码来解码成字符流(造成中文乱码)

2.解决方法

把request.getParameter(“参数名”)获取到的字符串先用ISO-8859-1编码成字节流,然后再将其用utf-8解码成字符流,只需将上边的问题代码修改为以下代码

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

角度二(保存数据时处理)

同样的问题我们还可以在数据库添加数据前处理,这样做的好处不过是只处理添加到数据库的中文数据,其他不符合添加数据库要求的数据不必处理。
jdbc代码
问题突破口在如下代码上

String URL = "jdbc:mysql://localhost:3306/mengze";

解决方法

通过转码的方式处理乱码问题

String URL = "jdbc:mysql://localhost:3306/mengze?useUnicode=true&characterEncoding=utf-8";

也可通过修改Tomcat配置文件,设置URL编码集(URIEncoding)设置编码,这种方法也是一劳永逸的,这里需要修改Tomcat/conf 目录下 的server.xml文件

<Connector URIEncoding="UTF-8" acceptCount="1500" connectionTimeout="20000" enableLookups="false" maxSpareThreads="100" maxThreads="1000" minSpareThreads="25" port="9082" protocol="HTTP/1.1" useBodyEncodingForURI="true"/>

重点在 userBodyEncodingForURI 和 URIEncoding 这两个属性
下面来解释一下这两个属性的意义

useBodyEncodingForURI参数: 表示是否用request.setCharacterEncoding参数对URL提交的数据和表单中GET方式提交的数据进行重新编码,在默认情况下,该参数为false。
URIEncoding参数: 指定对所有GET方式请求进行统一的重新编码(解码)的编码。

URIEncoding和useBodyEncodingForURI区别是

URIEncoding是对所有GET方式的请求的数据进行统一的重新编码,
useBodyEncodingForURI则是根据响应该请求的页面的request.setCharacterEncoding参数对数据进行的重新编码,不同的页面可以有不同的重新编码的编码。

Ending

本次JavaWeb问题分享就先到这里,希望能够给读者带来帮助,谢谢阅读,愿我们都能在知识的海洋里不断遨游并寻到自己心中的那块新大陆!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_52788492/article/details/127168742

JavaWeb中文乱码的种种情况-爱代码爱编程

目录   第一种:jsp页面中文乱码 概述 错误代码 乱码展示 解决 正确展示 正确代码 第二种:html页面中文乱码 概述 错误代码 乱码展示 解决 正确展示 正确代码 第三种:通过request.getParameter(name)获取表单提交 概述 错误代码 乱码展示 解决 正确展示 正确代码 第四种:通

java表单 mysql 乱码_Javaweb接收表单数据以及中文乱码处理-爱代码爱编程

前端表单数据 常见的表单项的传值,如: 普通input 单选radio 多选checkbox select下拉选择 textarea文本域 普通 input :name属性值为后台接收时的参数值。 用户名: 密码: 单选 radio :单选按钮的 name 值相同才能实现只能点击一个。 性别: 男 女 多选checkbox

java接收表单值乱码_Javaweb接收表单数据并处理中文乱码的方法-爱代码爱编程

Javaweb接收表单数据并处理中文乱码的方法 发布时间:2020-07-23 09:16:23 来源:亿速云 阅读:105 作者:小猪 这篇文章主要讲解了Javaweb接收表单数据并处理中文乱码的方法,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。 前端表单数据 常见的表单项的传值,如:普通input 单选

java cookie中文乱码_javaweb中解决Cookie中文乱码问题-爱代码爱编程

在javaweb中使用Cookie经常会出现乱码问题。 解决方法:对中文进行编码和解码 存储到Cookie中时: String str = URLEncoder.encode("你好","UTF-8"); Cookie cookie = new Cookie("aaa", str); cookie.setMaxAge(600); respo

java html中文乱码_javaweb开发.页面中文乱码问题-爱代码爱编程

1.设置eclips , window->Preferences->web->JSP Files中的Encoding选项为UTF-8 2.修改jsp文件头部为UTF-8 pageEncoding="UTF-8"%> 3.设置servlet中request对象编码 public class RegisterServlet

Javaweb中的中文乱码问题-爱代码爱编程

1.Tomcat设置utf-8编码 要设置GET的编码,可以修改server.xml文件中,相应的端口的Connector的属性:URIEncoding=“UTF-8”,这样,GET方式提交的数据才会被正确解码。 目录位置:加入:URIEncoding=“UTF-8” : <Connector port="8080" protocol="HT

JavaWeb-请求参数中文乱码问题-爱代码爱编程

请求参数中文乱码问题 出现原因 请求参数中文乱码出现的原因: 浏览器中的编码格式为:utf-8,当有中文数据的时候,会将中文数据以utf-8编码为字节,得到的字节将会存储在请求正文发送给服务器, 但是服务器中的解码格式为:iso8859-1,因此请求正文的字节会被解码成一串乱码 不同版本tomcat中请求参数中文乱码

关于javaweb中文乱码的一些解决办法_cute_new_baobao的博客-爱代码爱编程

个人心得 这次完整的只用JSP去完成这次有关JDBC链接数据库,真的收获很多,因为最开始学Javaweb学的也不是很认真,然后后面学了框架之后,自己都不用管太多编码的问题,那些东西,框架里面都是设置好的,然后这次Javaweb的普通的项目真的恶心到我了,然后现在UTF-8比较流行,我就以weiUTF-8为例,想要不乱码,那么就把所有的编码统一。 1:检

intellij idea javaweb tomcat server控制台中文乱码解决-爱代码爱编程

试了网络上很多种,缺少下面红色字体部分,一直设置不成功。补充后解决乱码 Intellij IDEA 解决方案如下: 1.配置tomcat, Edit Configurations,在tomcat配置中的 VM option中添加 “-Dfile.encoding=UTF-8” 2.点击Help => Edit custom VM Optio