JavaWeb中乱码问题
来源:互联网 发布:网络上个人信息 编辑:程序博客网 时间:2024/05/22 22:12
编码问题主要由于编码类型和解码类型不一致所以出现乱码,关键是理解web访问整个流程中每步使用的编码。首先介绍一下常用编码。
编码
utf-8编码
UTF-8是一种变长字节编码方式。对于某一个字符的UTF-8编码,如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的位数,其余各字节均以10开头。UTF-8最多可用到6个字节。
如表:
1字节 0xxxxxxx2字节 110xxxxx 10xxxxxx3字节 1110xxxx 10xxxxxx 10xxxxxx4字节 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx5字节 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx6字节 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
ISO-8859-1编码
ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是控制字符,0xA0-0xFF之间是文字符号。这个格式下没有中文编码,中文会乱码变成?
,很明显,iso8859-1编码最多能表示的字符范围是0-255,表示的字符范围很窄,无法表示中文字符。
URL编码
将针对- _.~
四个字符之外的所有非字母数字字符的字节码进行百分号编码。在Java和PHP当中,由于历史原因,导致在进行URLEncode的时候,会将空格编码为+
,而不是编码为十六进制编码%20
。
java中提供了URL编码的API,URLEncoder.encode
,URLDecoder.decode
String s = "getname 123=中";String sencoder = URLEncoder.encode(s, "utf-8");//编码后sencoder的值为getname+123%3D%E4%B8%AD
这里要注意,在web表单提交的数据中,只对value值这一项进行url编码,而且是浏览器自动进行,浏览器会按照页面当前编码将value字符翻译为字节码,然后对字节码进行百分号编码
转换编码
String(byte[] bytes, String encoding) // 指定一个字节数组的编码方式
encoding所指的是bytes中的数据是按照那种方式编码的,也就是让系统把bytes中的字节数据按照指定的encoding编码格式编码。如果不指明,bytes的编码方式将由jdk根据操作系统决定。
byte[] bytes = "中文".getBytes("utf-8");//将一个字符串,以utf-8编码形式解码为字节数组
关于Tomcat服务器编码问题
tomcat服务器默认设置的编码格式使ISO8859-1的编码格式,涉及编码的方法有
// 请求数据编码request.setCharacterEncoding("utf-8"); // 设置请求数据的编码格式,只对Post数据有效, //相当于tomcat内部自动对接收的数据做了一次URLDecoder.decode(queryString,"utf-8");request.getParameter("name"); // 获取请求参数,可以获取Post与getString queryString = request.getQueryString(); // 获取get提交的原始数据,需要进行url解码
// 响应数据编码response.setCharacterEncoding("GBK"); // 设置响应数据的编码,主要是针对写出的字符数据
例如:
PrintWriter out = response.getWriter();out.write(new String("你好".getBytes("GBK"),"iso-8859-1"));out.write("你好");out.write("abc");
由于默认tomcat使用的是ISO-8859-1进行编码的,所以当不指定返回数据编码格式时,默认就会使用ISO-8859-1进行编码,所以结果为:
你好??abc
当设置了相应数据编码,则会使用相应数据编码格式进行解码,GBK编码就不会出现乱码
响应数据编码
response.setContentType("text/xml;charset=utf-8");
或者
response.setCharacterEncoding("utf-8");
另一篇关于Servlet乱码
- javaweb中乱码问题
- JavaWeb中乱码问题
- javaweb中中文乱码问题
- javaWeb中解决乱码问题
- javaweb中乱码的问题
- Javaweb中乱码问题详解
- javaweb中使用过滤器解决乱码问题
- javaWeb中解决中文乱码问题
- javaweb中的乱码问题
- javaweb中的乱码问题
- JavaWeb 乱码问题
- JavaWeb中文乱码问题
- javaWeb乱码问题
- javaWeb中文乱码问题
- 解决javaweb乱码问题
- javaweb 中文乱码问题
- javaweb中文乱码问题
- JavaWeb乱码问题集合
- 算法笔记 3.1 简单模拟
- 欢迎使用CSDN-markdown编辑器
- Spring源码分析之lazy-init属性的配置
- 求1+2+3+...+n(java版)
- sql server 安装到服务器上时出现的错误,以及怎么去解决之后有可能出现的一系列错误。
- JavaWeb中乱码问题
- 国内可用的API合集
- 删除对象的属性 delete的用法
- 基于HTC vive 的 VR场景遍历及环境互动项目规划
- 每天一个小算法之Shell排序(希尔排序)
- 项目实训第二周2
- C语言宏定义小结
- PHPExcel自动导入数据到数据库
- 欢迎使用CSDN-markdown编辑器