Javaweb 编解码流程
参考:
https://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/#N10263
https://www.cnblogs.com/chenssy/p/4207554.html
场景:
JSP: <%@ page language="java" contentType="text/html; charset=uft-8" pageEncoding="utf-8"%>
发起get请求: window.location.href="/testWebb/testWeb?aa="+'我我我哦王'
1.url中参数在内存中以unicode(char)方式保存
2.发起get请求后,浏览器根据页面charset对url参数进行编码(bytes),例如:我我我哦王
gbk:%CE%D2%CE%D2%CE%D2%C5%B6%CD%F5
utf8:%E6%88%91%E6%88%91%E6%88%91%E5%93%A6%E7%8E%8B(%为url规范增加)
3.服务端request
request根据content-type编码格式进行解码(bytes-char),若未设置content-type则默认使用ISO-8859-1进行解码,得到unicode(char);
ISO-8859-1 字符集的编码范围是 0000-00FF,正好和一个字节的编码范围相对应。这种特性保证了使用 ISO-8859-1 进行编码和解码可以保持编码数值“不变”。即
当中文通过gbk/U8转为bytes后再经过ISO转char,再转bytes,再转char内容不变,即ISO无法从bytes中还原出原gbk或utf8编码格式的char。参见参考链接1
4.服务端response
response根据content-type编码格式进行编码(char-bytes),若未设置content-type则默认使用ISO-8859-1进行编码,得到bytes
5.浏览器根据页面charset对bytes进行解码
注释1,char(unicode)对于所有中文都一样,bytes根据编码格式不同而不同
注释2,new String(request.getParameter("aa").getBytes("ISO-8859-1"),"UTF-8")
1.未设置content-type时,request.getParameter()方法按照ISO方式对Bytes(gbk或utf8)进行解码获得unicode(char),此时bytes与char在内存中存储一致;
2.getBytes()方法根据编码格式将char转成bytes(gbk或utf8);
3.new String 编码格式将bytes转成char;编码格式需要与步骤1中原编码格式一致
char(unicode)->gbk/utf8/iso(encode) 页面->%+16(byte)->request decode (gbk/utf8/iso(默认))->char(unicode)->reponse encode->bytes->浏览器 decode(header)->char(unicode)
Javaweb 编解码流程的更多相关文章
- 多媒体文件格式分析 MP3文件结构及编解码流程
多媒体文件格式分析 http://blog.csdn.net/taniya001/article/details/7962864 多媒体文件格式分析 MP3文件结构及编解码流程 http://www. ...
- H264的编解码流程?
- 视频编解码学习之路(H264)
学习视频编解码技术很难吗?视频编解码技术的未来是什么? 明了的说,无论是软件还是硬件设计,视频编解码技术有很多难点,都需要很长一段时间积累才行. 从一开始接触MPEG-2到最新的H.264标准,可算走 ...
- FFmpeg编解码处理1-转码全流程简介
本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10584901.html FFmpeg编解码处理系列笔记: [0]. FFmpeg时间戳详 ...
- iOS8系统H264视频硬件编解码说明
公司项目原因,接触了一下视频流H264的编解码知识,之前项目使用的是FFMpeg多媒体库,利用CPU做视频的编码和解码,俗称为软编软解.该方法比较通用,但是占用CPU资源,编解码效率不高.一般系统都会 ...
- android 音频编解码1
1. Android 官方的 MediaCodec API 该 API 是在 Andorid 4.1 (API 16) 版本引入的 MediaCodec 使用的基本流程是: 1234567891011 ...
- FFMPEG解码流程
FFMPEG解码流程: 1. 注册所有容器格式和CODEC: av_register_all() 2. 打开文件: av_open_input_file() 3. 从文件中提取流信息: av_f ...
- 转:关于视频H264编解码的应用实现
转:http://blog.csdn.net/scalerzhangjie/article/details/8273410 项目要用到视频编解码,最近半个月都在搞,说实话真是走了很多弯路,浪费了很多时 ...
- (转)FFMPEG解码流程
http://www.douban.com/note/228831821/ FFMPEG解码流程: 1. 注册所有容器格式和CODEC: av_register_all() 2. 打开 ...
随机推荐
- mui-H5下载图片到本地
function save___img(picurl) { // 创建下载任务 // picurl="http://*************/Public/Uploads/dingwei/ ...
- DOM节点遍历
"DOM2级遍历和范围"模块定义了两个用于辅助完成顺序遍历DOM结构的类型:NodeIterator 和 TreeWalker .这两个类型能够根据给定的节点对DOM结构进行深度优 ...
- curl get方式
提交数据到https时,需要pem证书来加密.我们使用浏览器访问https的时候,浏览器会自动加载网站的安全证书进行加密.但是你用curl请求https时,没有通过浏览器,就只有自己手动增加一个安全证 ...
- 20175314 《Java程序设计》第九周学习总结
20175314 <Java程序设计>第九周学习总结 教材学习内容总结 根据课本的介绍下载了MySQL和Navicat for MySQL并成功对后者进行破解 MySQL客户端管理工具(如 ...
- 48 【golang】json的效率
本文将主要做如下几方面的测试: 1,构造一个[100]struct的数组,然后来测试它的json编码后的字符串 或者([]byte),首先关心它的功能是否正常: 2,在很早之前,我们在使用golang ...
- 设计模式之装饰者模式-java实例
设计模式之装饰者模式 需求场景 我们有了别人提供的产品,但是别人提供的产品对我们来说还不够完善,我们需要对这个产品的功能进行补强,此时可以考虑使用装饰者模式. 我们已经有了产品,而且这个产品的功能非常 ...
- 移值UCOS2到M4核与M3核的区别
之前移值过ucos2到stm32f2系列的单片机,这个单片机是属于arm的m3内核的.最近在学习永磁同步电机的控制,对于这个电机的控制,有比较多的数学计算,甚至于还有浮点的运算.所以用到了stm32f ...
- Tomcat7 目录详解
1.bin:该目录下存放的是二进制可执行文件,如果是安装版,那么这个目录下会有两个exe文件:tomcat6.exe.tomcat6w.exe,前者是在控制台下启动Tomcat,后者是弹出UGI窗口启 ...
- 7B - 今年暑假不AC
“今年暑假不AC?” “是的.” “那你干什么呢?” “看世界杯呀,笨蛋!” “@#$%^&*%...” 确实如此,世界杯来了,球迷的节日也来了,估计很多ACMer也会抛开电脑,奔向电视了. ...
- 解决js数组循环删除出错
for(var i=0,flag=true,len=arr.length;i<len;flag ? i++ : i){ if( arr[i]&&arr[i].status==0 ...