有关于get提交与post提交在字符编码集方面的区别
来源:互联网 发布:台湾4g网络制式有哪些 编辑:程序博客网 时间:2024/06/05 09:36
进入java工程师这个职位已有8个月的时间,在项目中遇到无数问题,大部分问题都已解决,但从未想过原因并予以记录,今遇到字符乱码的bug却无法决解不甚唏嘘。
乱码的问题经常发生也不常发生,当一个中小型的项目交由少数人完成时,从项目的各个框架、前端及数据库之间都会统一定义好某种编码集,以防乱码.
比如在数据库中
找到MYSQL安装目录下的MY.INI中的 default-character-set 改这default-character-set=UTF,然后重启MTSQL服务就可以。
亦或者如果已存在的旧数据库,可以执行以下SQL语句alter database 数据库名 character set utf8;
在项目中一般配置wed.xml 过滤器的方式是
<!--通过类org.springframework.web.filter.CharacterEncodingFilter,定义request和response的编码--><filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><!--CharacterEncodingFilter类具有encoding和forceEncoding两个属性,其中encoding是表示设置request的编码,forceEncoding表示是否同时设置response的编码。-->
<param-name>encoding</param-name><param-value>utf-8</param-value></init-param><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter>定义过滤内容:<filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>*.jsp</url-pattern></filter-mapping><filter-mapping><filter-name>encodingFilter</filter-name><servlet-name>qw-application</servlet-name></filter-mapping><filter-mapping><filter-name>encodingFilter</filter-name><servlet-name>icustomer</servlet-name></filter-mapping>
在使用Spring MVC 做java Web 项目时,可以采用Spring框架自带的过滤器CharacterEncodingFilter,这样可以大大减轻了我们的工作量在web.xml文件中filter的位置加上如下内容:
<filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>*</url-pattern></filter-mapping>
在前端展示的页面中加入
<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
以上操作基本已不会在出现乱码,但却忽略了页面提交方式的不同
首先在自己的想法中,如若一切准备妥当便不应该在有乱码的存在,但通过request.getParameter("username") 方法获取中文参数时却是一堆乱码
原本可以用Stirng name=request.getParameter("tkeyname");
name=URLDecoder.decode(name,"utf-8");
来决解,但是不可能所有的controller层都加上这个代码啊
后经查询得知
这个原因是服务器导致的,服务器比如tomcat接收get方法默认使用的是ISO-8859-1编码,而浏览器发送时文字编码是和页面编码保持一致的,如果页面是使用utf-8 编码 get方法文字自然是使用utf-8编码,但接收服务器没有设置的情况下用了ISO-8859-1编码接收,中文自然就成乱码了,不过由于ISO-8859-1编码是单字节编码所以我们可以使用getBytes("ISO-8859-1"),"utf-8"这样把文字重新转换成utf-8 编码。第一个发送的文字是utf-8编码 而tomcat接收后用错误的ISO-8859-1编码了,这样getBytes("ISO-8859-1")后会重新得到正确的utf-8编码的字节数组 ,然后用 new String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8")重新将字节编码成UTF-8编码的文字这样文字就正确了。如果是tomcat的话 server.xml文件里<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>后边的URIEncoding就是设置get方法编码的如果没有指定URL接收的编码类型,自动会用ISO-8859-1编码
0 0
- 有关于get提交与post提交在字符编码集方面的区别
- 有关于get提交与post提交在字符编码集方面的区别
- post与get提交方式的区别
- POST与GET提交表单的区别
- POST与GET提交表单的区别
- 表单提交 get 与post的区别
- post与get提交方式的区别
- POST与GET提交的区别
- get与post提交方式的区别
- get与post提交方式的区别
- get与post提交方式的区别
- get与post提交方式的区别
- get与post提交方式的区别
- GET请求与POST提交的区别
- post提交和get提交的区别
- post提交和get提交的区别
- GET提交和POST提交的区别
- get提交和post提交的区别
- error C2039: “ReadHuge”: 不是“CFile”的成员
- Sublime Text 全程指南
- 国外博士论文下载~
- vi常用操作
- Android 5.x OTA Update官方文档(二,OTA 打包工具ota_from_target_files)
- 有关于get提交与post提交在字符编码集方面的区别
- 第四周项目三 用对象数组操作长方柱类
- 【留十年记忆】我的IT之路
- 天池,删除时间
- P51-9
- iOS触摸事件与手势
- 第四周项目1-三角形类的构造函数(1)
- 天池,删除地址
- interview and senior's experience summary