JAVA WEB 中的编码分析
JAVA WEB 中的编码分析
*/-->
pre.src {background-color: #292b2e; color: #b2b2b2;}
pre.src {background-color: #292b2e; color: #b2b2b2;}
pre.src {background-color: #292b2e; color: #b2b2b2;}
pre.src {background-color: #292b2e; color: #b2b2b2;}
pre.src {background-color: #292b2e; color: #b2b2b2;}
pre.src {background-color: #292b2e; color: #b2b2b2;}
pre.src {background-color: #292b2e; color: #b2b2b2;}
pre.src {background-color: #292b2e; color: #b2b2b2;}
pre.src {background-color: #292b2e; color: #b2b2b2;}
pre.src {background-color: #292b2e; color: #b2b2b2;}
pre.src {background-color: #292b2e; color: #b2b2b2;}
pre.src {background-color: #292b2e; color: #b2b2b2;}
pre.src {background-color: #fbf8ef; color: #655370;}
pre.src {background-color: #fbf8ef; color: #655370;}
pre.src {background-color: #fbf8ef; color: #655370;}
pre.src {background-color: #fbf8ef; color: #655370;}
pre.src {background-color: #fbf8ef; color: #655370;}
pre.src {background-color: #292b2e; color: #b2b2b2;}
pre.src {background-color: #292b2e; color: #b2b2b2;}
pre.src {background-color: #292b2e; color: #b2b2b2;}
pre.src {background-color: #292b2e; color: #b2b2b2;}
pre.src {background-color: #292b2e; color: #b2b2b2;}
pre.src {background-color: #292b2e; color: #b2b2b2;}
JAVA WEB 中的编码分析
Table of Contents
1 常见编码格式的区别
1.1 为什么要编码
1.2 常见编码格式
2 需要编码的场景
2.1 磁盘IO
2.2 内存中
- 字符和字节之间的转换demo
- 内存字符占用字节数验证
2.3 网络IO
但是还是强烈的不建议使用操作系统的默认编码,因为这样,你的应用程序的编码格式就和运行环境绑定起来了,在跨环境下很可能出现乱码问题。
genesys sdk 的demo 示例,怎么来解决的?
2.4 java 中编解码的原理
2.4.1 编码类图
2.4.2 编码时序图
2.4.3 各种编码格式编码后的字节数组示例
3 JAVA WEB 中涉及的编码问题
3.1 HTTP请求中涉及到编码的地方
3.2 URL中的编码
- ServletPath和PathInfo中的中文
- QueryString中的中文
public void service(org.apache.coyote.Request req,
org.apache.coyote.Response res)
throws Exception { Request request = (Request) req.getNote(ADAPTER_NOTES);
Response response = (Response) res.getNote(ADAPTER_NOTES); if (request == null) { // Create objects
request = connector.createRequest();
request.setCoyoteRequest(req);
response = connector.createResponse();
response.setCoyoteResponse(res); // Link objects
request.setResponse(response);
response.setRequest(request); // Set as notes
req.setNote(ADAPTER_NOTES, request);
res.setNote(ADAPTER_NOTES, response); // Set query string encoding
req.getParameters().setQueryStringEncoding
(connector.getURIEncoding()); }
所以,结论是,queryStringEncoding编码的优先级是,第一是随contentType(设置了useBodyEncodingForURI),第二随URIEncoding(没有设置useBodyEncodingForURI),第三则是默认编码(即没有设置contentType,设置了useBodyEncodingForURI=true)
protected void parseParameters() { parametersParsed = true; Parameters parameters = coyoteRequest.getParameters();
boolean success = false;
try {
// Set this every time in case limit has been changed via JMX
parameters.setLimit(getConnector().getMaxParameterCount()); // getCharacterEncoding() may have been overridden to search for
// hidden form field containing request encoding
String enc = getCharacterEncoding(); boolean useBodyEncodingForURI = connector.getUseBodyEncodingForURI();
if (enc != null) {
parameters.setEncoding(enc);
if (useBodyEncodingForURI) {
parameters.setQueryStringEncoding(enc);
}
} else {
parameters.setEncoding
(org.apache.coyote.Constants.DEFAULT_CHARACTER_ENCODING);
if (useBodyEncodingForURI) {
parameters.setQueryStringEncoding
(org.apache.coyote.Constants.DEFAULT_CHARACTER_ENCODING);
}
}
<Connector executor="tomcatThreadPool" protocol="org.apache.coyote.http11.Http11NioProtocol"
port="" URIEncoding="UTF-8" useBodyEncodingForURI="true" compression="off" enableLookups="false"
maxKeepAliveRequests="" bufferSize="" connectionTimeout=""
redirectPort="" server="DPServer"/>
3.3 HTTP header 中的编码
3.4 POST 的编码
/**
* Get the character encoding used for this request.
*/
public String getCharacterEncoding() { if (charEncoding != null) {
return charEncoding;
} charEncoding = getCharsetFromContentType(getContentType());
return charEncoding; }
JAVA WEB 中的编码分析的更多相关文章
- Java web中常见编码乱码问题(二)
根据上篇记录Java web中常见编码乱码问题(一), 接着记录乱码案例: 案例分析: 2.输出流写入内容或者输入流读取内容时乱码(内容中有中文) 原因分析: a. 如果是按字节写入或读取时乱码, ...
- Java web中常见编码乱码问题(一)
最近在看Java web中中文编码问题,特此记录下. 本文将会介绍常见编码方式和Java web中遇到中文乱码问题的常见解决方法: 一.常见编码方式: 1.ASCII 码 众所周知,这是最简单的编码. ...
- 深入分析Java Web中的编码问题
编码问题一直困扰着我,每次遇到乱码或者编码问题,网上一查,问题解决了,但是实际的原理并没有搞懂,每次遇到,都是什么头疼. 决定彻彻底底的一次性解决编码问题. 1.为什么要编码 计算机的基本单元是字节, ...
- Java开发中的编码分析__GET&POST
GET方式提交参数分析 code.jsp <%@ page language="java" contentType="text/html; charset=UTF- ...
- Java Web中的编码解析
在springmvc工程web.xml中配置中文编码 <!-- 配置请求过滤器,编码格式设为UTF-8,避免中文乱码--> <filter> <filter-name&g ...
- 深入分析Java Web中的中文编码问题
要对Java Web项目进行编码原因: 1.在计算机中存储信息的最小单位是1个字节,即8个bit,所以能表示的字符范围是0~255个. 2.电脑需要表示的符号太多.无法用1个字节完全表示. 要解决这个 ...
- 【JAVA编码专题】 JAVA字符编码系列三:Java应用中的编码问题
这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记录下来以便日后参考. 为了构成一个完整的对文字编码的认识和深入把握,以便处理在Java开发过程中遇到的各种问 ...
- java web 中有效解决中文乱码问题-pageEncoding与charset区别, response和request的setCharacterEncoding 区别
这里先写几个大家容易搞混的编码设置代码: 在jsp代码中的头部往往有这两行代码 pageEncoding是jsp文件本身的编码contentType的charset是指服务器发送给客户端时的内容编码J ...
- Java Web 中使用ffmpeg实现视频转码、视频截图
Java Web 中使用ffmpeg实现视频转码.视频截图 转载自:[ http://www.cnblogs.com/dennisit/archive/2013/02/16/2913287.html ...
随机推荐
- iis配置,客户端可以下载apk,或者播放视频
1.选中网站,在右侧找到iis中的MINE类型 2.点击最右侧的添加按钮,提示输入扩展名 3. apk:在弹出的添加窗口里的文件扩展名输入:APK在MIME类型输入:application/vnd.a ...
- css float left right 中间空间城数据无法显示
css float left right 中间空间城数据无法显示 是由于设定了width具体值太小造成,简单用%值或不设置.
- zf-关于分页必写的代码
1 存储过程 ALTER PROCEDURE [dbo].[getStatForXXGKWeb] ), ), ), @page int, -- 必写的 @pageRows int,-- 必写的 @al ...
- js判断是否是正整数,js判断是否是数字
//判断字符串是否为数字 function checkRate(input) { var re = /^[0-9]+.?[0-9]*$/; if (!re.test(input.rate.value) ...
- CentOS 6.5 安装Suricata(with PF_RING & CUDA)
0.基础包 确保已安装 yum install mpfr cpp ppl cloog-ppl gcc kernel-devel pcre-devel libpcap-devel yum-plugin- ...
- ant调用shell命令(Ubuntu)
ant中调用Makefile,使用shell中的make命令 <?xml version="1.0" encoding="utf-8" ?> < ...
- fragment 数据传递,传值,通信
[原][Fragment精深系列4]Fragment与Activity之间的数据交互 2015-5-26阅读389 评论0 以下内容来自于自己的实践和网络资料的整理,希望对你有帮助. 一.Acti ...
- js学习之函数
1/.js中函数就是对象. 2/以表达式方式定义的函数一般不要函数名以使代码紧凑. 3/js中函数声明的方式会被默认提到外部脚本或最前面,所以在其定义前的代码也可调用. 然而以表达式方式的则不行. 4 ...
- Task 编程中的异常处理
在 .Net 开发中, 使用 Task . Task<T> 进行异步编程是非常方便的, 但是在处理 Task 产生的异常时, 需要注意一个问题, 比如下面的代码: ? 1 2 3 4 5 ...
- Android中通过pid获取app包名
String callerPackage = getAppNameByPID(getContext(), Binder.getCallingPid()); private String getAppN ...