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文件.不一而足. 什么是编码?把明文变成计算机语言 ...
随机推荐
- 使用 Android Studio 开发工具创建一个 Android 应用程序,并在 Genymotion 模拟器上运行
需求说明: 使用 Android Studio 开发工具创建一个 Android 应用程序,并在 Genymotion 模拟器上运行 实现步骤: 打开 Android Studio,创建一个 Andr ...
- 编写Java程序,使用面向接口编程模拟不同动物的吼叫声
返回本章节 返回作业目录 需求说明: 使用面向接口编程模拟不同动物的吼叫声 实现思路: 使用面向接口编程模拟不同动物吼叫声的实现思路: 定义发声接口Voice,在其中定义抽象吼叫方法sing(). 分 ...
- zabbix5.0监控安全配置全过程
第一部分,安装 此安装配置为yum方式安装zabbix5.0 系统版本:CentOS Linux release 7.5.1804 (Core) zabbix版本:rpm -qa | grep zab ...
- 如何修改文件的 “创建时间” 和 “修改时间”(Windows Linux macOS)
请访问原文链接:https://sysin.org/blog/how-to-change-file-date,查看最新版.原创作品,转载请保留出处. 作者:gc(at)sysin.org,主页:www ...
- 数三角count(归类)
评测方式:文本比较 题目描述 这是一个数三角的游戏.长度为1或SQRT(2)的小木棍放在一个网格上.如图所示,有水平的,垂直的或对角的.对角放置的木棍可以交叉. avatar 将木棍随意地放在网格上得 ...
- Pytest_用例执行顺序(5)
在unittest中,测试用例的执行顺序与测试用例的名称有关,按照名称的ascii码排序的,并不是按照用例的编写顺序执行的. pytest默认是按用例的编写顺序执行的 我们可以通过第三方包 pytes ...
- Python 使用timeit模块计算时间复杂度时系统报“invalid syntax”错误
最近在看算法相关的文档 在时间复杂度环节 遇到一个实例: 导入timeit模块后,通过Timer定时器计算两种不同处理方法的时间复杂度 错误代码及报错如下图所示: 仔细查阅 发现from__main_ ...
- Flask + flask_sqlalchemy + jq 完成书籍展示、新增、删除功能
后端代码 from flask import Flask, render_template, request, jsonify from flask_wtf.csrf import CSRFProte ...
- 在git上下载的源码项目,运行时报错AssertionError [ERR_ASSERTION] [ERR_ASSERTION]: Task function must be specified
原因是gulp3 和gulp4的运行方式不一样, 解决方法: 1.修改package.json文件中gulp的版本为最新版本 2.删除node_modules文件夹和package-lock.json ...
- CentOS 7 连接不到网络解决方法(设置静态ip)
使用VM12创建虚拟机并安装CentOS 7,但是安装完成后发现连接不到网络. ping jd.com发现不通 因为在创建虚拟机的时候 我们选择的是NAT模式 这里给出NAT模式下对应的的解决方法: ...