JavaWeb编码浅解
Java中编码与解码的概念
我的理解
编码:将Unicode码转为指定编码的字节数据。
解码:使用指定的编码解析字节数据,使其再次变为Unicode码

大佬的解释
一、解决乱码问题,要先了解一些基础概念:
1、字符集:在计算机底层中数据存储的都是二进制数据,要想获取真正有意义的字符,就必须让二进制数据与每一个字符对应起来,这种对应关系就形成了一张编码表。
常用字符集: iso-8859-1 拉丁码表 latin,表示西欧语言,使用一个字节即8位表示数据
GB2312 简体中文码表。包含6000-7000中文和符号。用两个字节表示。两个字节都是开头为1,都为负数。
GBK 目前最常用的中文码表,2万的中文和符号。用两个字节表示数据。
unicode 国际标准码,无论是什么文字,都用两个字节存储
UTF-8 基于unicode,一个字节就可以存储数据,不用两个字节存储,而且这个码表更加的标准化,在每一个字节头加入了编码信息。
(Linux 默认使用的iso-88059-1,win32默认使用的GB2312)
2、编码:将字符转换成在字符集中对应的编码
解码:在字符集中查找出编码对应的字符
二、中文在网络中的传输过程
1、以JAVA为例,eclipse默认使用UTF-8编码集,TOMCAT服务器默认使用iso-8859-1编码集,浏览器一般默认使用GBK编码集。
程序与服务器之间以字符传输,服务器与浏览器之间以字节传输。
2、中文传输过程:浏览器中的中文字符----->进行编码----->服务器----->进行解码----->程序;
程序中的中文字符----->服务器----->进行解码----->浏览器----->编码进行显示
3、乱码产生原因以解决方式:
(1)、浏览器中的中文字符以GBK进行编码,以字节流传输到服务器,服务器再以iso-8859-1进行解码,以字符的形式传输给程序。
因为iso-8859-1编码集不支持中文字符,所有解码后的字符都是西欧字符,把这些字符传输给程序就产生了乱码;
针对这个原因,只要把服务器的编码集设置为utf-8即可:
request.setCharacterEncoding("utf-8") ;
但这种方法只能用于POST请求方式,因为设置只会作用于请求体中的内容,如果是GET请求方式,可用先解码再编码的方式:
byte[] buffer = request.getParameter("word").getBytes("ISO-8859-1"); //进行编码
String newStr = new String(buffer,"UTF-8"); //进行解码
(2)、程序中的中文字符原样传输到服务器,服务器要先对中文字符进行编码再传输给浏览器,但因为iso-8859-1编码集不支持中文字符,所以在字符集中查找不到对应的编码,编码后就变成了问号,传输给了浏览器并显示;
针对这种情况,要进行两次设置:
response.setCharacterEncoding("UTF-8"); //将服务器编码集设置为UTF-8
response.setContentType("text/html;charset=UTF-8"); //将浏览器编码集设置为UTF-8
实际上第二行设置已经包含了对服务器的设置,所以通常只要写第二句代码即可
JavaWeb编码浅解的更多相关文章
- GIS历史概述与WebGis应用开发技术浅解
声明:本篇在李晓晖的<杂谈WebGIS>,补充更多的资料说明.基于地图二次开发一直断断续续在做,这里算是补充一下基本功把.其实对于前端,WebGis开发都是api,抄demo,改.GIS深 ...
- 数据结构图文解析之:哈夫曼树与哈夫曼编码详解及C++模板实现
0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...
- 数据库的编码浅谈(ZHS16GBK与US7ASCII)
数据库的编码浅谈(ZHS16GBK与US7ASCII) 2007-11-15 17:14:18 分类: Oracle SQL> SELECT RAWTOHEX('郭A军') from dual ...
- Protocol Buffers编码详解,例子,图解
Protocol Buffers编码详解,例子,图解 本文不是让你掌握protobuf的使用,而是以超级细致的例子的方式分析protobuf的编码设计.通过此文你可以了解protobuf的数据压缩能力 ...
- H264 编码详解
H264 编码详解(收集转载) (1) x264_param_default( x264_param_t *param ) 作用: 对编码器进行参数设定 cqm:量化表相关信息 csp: ...
- 字符编码详解 good
字符编码详解 字符编码详解
- 从最大似然到EM算法浅解
从最大似然到EM算法浅解 zouxy09@qq.com http://blog.csdn.net/zouxy09 机器学习十大算法之中的一个:EM算法.能评得上十大之中的一个,让人听起来认为挺NB的. ...
- Python2.7字符编码详解
目录 Python2.7字符编码详解 声明 一. 字符编码基础 1.1 抽象字符清单(ACR) 1.2 已编码字符集(CCS) 1.3 字符编码格式(CEF) 1.3.1 ASCII(初创) 1.3. ...
- Python字符编码详解,str,bytes
什么是明文 “明文”是可以是文本,音乐,可以编码成mp3文件.明文可以是图像的,可以编码为gif.png或jpg文件.明文是电影的,可以编码成wmv文件.不一而足. 什么是编码?把明文变成计算机语言 ...
随机推荐
- Java实习生常规技术面试题每日十题Java基础(四)
目录 1.String 和StringBuffer的区别. 2.数组有没有length()这个方法? String有没有length()这个方法? 3.final, finally, finalize ...
- Hadoop问题解决记录
# 1.解决Unable to load native-hadoop library for your platform告警 安装Hadoop启动之后总有警告:Unable to load nativ ...
- WPF使用MVVM(一)-属性绑定
WPF使用MVVM(一)-属性绑定 简单介绍MVVM MVVM是Model(数据类型),View(界面),ViewModel(数据与界面之间的桥梁)的缩写,是一种编程模式,优点一劳永逸,初步增加一些逻 ...
- 初识python: 文件下载进度
(后续待更新...) 使用 request 的 urlretrieve 方法创建"回调函数": 下载进度 详细代码如下: #!/user/bin env python # auth ...
- Centos更换阿里云源
1.备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2.下载新的CentOS-Base ...
- LCT小记
不用说了,直接上怎么 die( 千万不要和 Treap 一样写左旋 zig 和右旋 zag,莫名死亡.Splay 只支持一个 rotate 上旋一个节点即可. splay() 之前记得弄一个栈存储 u ...
- 《剑指offer》面试题42. 连续子数组的最大和
问题描述 输入一个整型数组,数组里有正数也有负数.数组中的一个或连续多个整数组成一个子数组.求所有子数组的和的最大值. 要求时间复杂度为O(n). 示例1: 输入: nums = [-2,1,-3,4 ...
- SQL语句的分类:DQL、DML、DDL、DCL、TCL的含义和用途
MySQL中提供了很多关键字,将这些关键字 和 数据组合起来,就是常说的SQL语句,数据库上大部分的操作都是通过SQL语句来完成.日常工作中经常听到 DML.DDL语句这些名词,使用字母缩写来表达含义 ...
- Java打印空心三角
Java打印空心三角 public static void main(String[] args) { int n=5; //n表示输出空心三角形行数,这里以5行为例 for(int i=1;i< ...
- 【练习】rust中的复制语义和移动语义
1.基本类型都是复制语义的 fn main(){ let a = 123; { #[allow(unused_variables)] let b = a; //如果是移动语义,那么后续的a将不再有效 ...