参考:
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 编解码流程的更多相关文章

  1. 多媒体文件格式分析 MP3文件结构及编解码流程

    多媒体文件格式分析 http://blog.csdn.net/taniya001/article/details/7962864 多媒体文件格式分析 MP3文件结构及编解码流程 http://www. ...

  2. H264的编解码流程?

  3. 视频编解码学习之路(H264)

    学习视频编解码技术很难吗?视频编解码技术的未来是什么? 明了的说,无论是软件还是硬件设计,视频编解码技术有很多难点,都需要很长一段时间积累才行. 从一开始接触MPEG-2到最新的H.264标准,可算走 ...

  4. FFmpeg编解码处理1-转码全流程简介

    本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10584901.html FFmpeg编解码处理系列笔记: [0]. FFmpeg时间戳详 ...

  5. iOS8系统H264视频硬件编解码说明

    公司项目原因,接触了一下视频流H264的编解码知识,之前项目使用的是FFMpeg多媒体库,利用CPU做视频的编码和解码,俗称为软编软解.该方法比较通用,但是占用CPU资源,编解码效率不高.一般系统都会 ...

  6. android 音频编解码1

    1. Android 官方的 MediaCodec API 该 API 是在 Andorid 4.1 (API 16) 版本引入的 MediaCodec 使用的基本流程是: 1234567891011 ...

  7. FFMPEG解码流程

    FFMPEG解码流程:  1. 注册所有容器格式和CODEC: av_register_all()  2. 打开文件: av_open_input_file()  3. 从文件中提取流信息: av_f ...

  8. 转:关于视频H264编解码的应用实现

    转:http://blog.csdn.net/scalerzhangjie/article/details/8273410 项目要用到视频编解码,最近半个月都在搞,说实话真是走了很多弯路,浪费了很多时 ...

  9. (转)FFMPEG解码流程

    http://www.douban.com/note/228831821/ FFMPEG解码流程:     1. 注册所有容器格式和CODEC: av_register_all()     2. 打开 ...

随机推荐

  1. 安装软件,遇到弹框Windows Installer Coordinator,一直循环卡在这个弹框处

    转载自https://www.cliftonsystems.co.uk/fixing-windows-installer-coordinator-loop/ 复制粘贴原文内容,以防将来访问不到原网页了 ...

  2. Quartz与Spring集成(二)

    一.获取quartz详情jar <!-- quartz 的jar --> <dependency> <groupId>org.quartz-scheduler< ...

  3. NBU显示备份成功,但实际是无备份成功

    从3月18日开始到4月3日是备份失败的 GROUPSIZE 7 OPERATION BACKUPDATABASE "DBADB" SQLHOST "yicatong&qu ...

  4. Appium 学习三:Appium-Desktop 填坑

    之前使用appium执行自动化脚本,现使用appium-desktop  遇到了一些问题 1.使用name定位的报错   Locator Strategy 'name' is not supporte ...

  5. java中mysql查询报错java.sql.SQLException: Before start of result set

    异常:java.sql.SQLException: Before start of result set 解决方法:使用rs.getString();前一定要加上rs.next(); sm = con ...

  6. python note 09 初识函数

    1.函数 def my_len(): #自定义函数(相当于len) i = 0 for k in s: i += 1 print(i) print(my_len()) #输出None,因为没有返回值 ...

  7. 配置java-jdk

    我将jdk安装在 /usr/local/jdk目录下 安装好之后 cd /etc/ ls vim profile export JAVA_HOME=/usr/jdk1.8.0_121  #你的jdk所 ...

  8. java关于get/post请求

    package com.study.test; import java.io.BufferedReader;import java.io.IOException;import java.io.Inpu ...

  9. ubuntu18.04微信小程序学习笔记

    安装微信小程序开发工具 安装 https://github.com/cytle/wechat_web_devtools 创建快捷方式 sudo nautilus //在/usr/share/appli ...

  10. JavaSE基础知识(5)—面向对象(5.6 static关键字)

    一.说明 static属于一种修饰符,可以用于修饰 属性.方法.初始化块.内部类用static修饰的成员,称为静态成员不用static修饰的成员,称为普通成员 二.静态属性的特点 1.生命周期 静态属 ...