Java Web中的编码解析
在springmvc工程web.xml中配置中文编码
```
<!-- 配置请求过滤器,编码格式设为UTF-8,避免中文乱码-->
<filter>
<filter-name>springUtf8Encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>springUtf8Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
```
如果不配置utf-8的编码的话,提交到后台的请求,以及返回到前台页面的数据都会乱码,因为默认的编码格式是ISO-8859-1
ISO-8859-1编码代码解析
```
private CoderResult encodeArrayLoop(CharBuffer var1, ByteBuffer var2) {
// 获得var1的数组对象var3
char[] var3 = var1.array();
// 获得var1对象的大小
int var4 = var1.arrayOffset() + var1.position();
// 获得var1对象的最大容量
int var5 = var1.arrayOffset() + var1.limit();
// 校验最大容量大于对象大小
assert var4 <= var5;
var4 = var4 <= var5 ? var4 : var5;
byte[] var6 = var2.array();
// 获得var2对象的大小
int var7 = var2.arrayOffset() + var2.position();
// 获得var2对象的最大容量
int var8 = var2.arrayOffset() + var2.limit();
assert var7 <= var8;
var7 = var7 <= var8 ? var7 : var8;
while(true) {
CoderResult var10;
try {
// 如果待解码的字符串大小大于输出的字节缓存容器,那么返回结果溢出
if (var4 >= var5) {
CoderResult var14 = CoderResult.UNDERFLOW;
return var14;
}
// 获取待解码字符
char var9 = var3[var4];
// 因为一个字节是4位byte,255是8位byte,所以如果字符小于两个byte,那么执行解码
if (var9 <= 255) {
if (var7 >= var8) {
var10 = CoderResult.OVERFLOW;
return var10;
}
// 将编码结果放入var2的数组对象中
var6[var7++] = (byte)var9;
++var4;
continue;
}
if (this.sgp.parse(var9, var3, var4, var5) < 0) {
var10 = this.sgp.error();
return var10;
}
// var9超出255范围,返回编码不匹配报错
var10 = this.sgp.unmappableResult();
} finally {
var1.position(var4 - var1.arrayOffset());
var2.position(var7 - var2.arrayOffset());
}
return var10;
}
}
<p>this.sgp.parse(var9, var3, var4, var5) < 0 判断如果var9参数的数值范围是从 U+DC00 到 U+DFFF,则为 true;否则为 false。如果为true的话,则代表var9这个字符是UTF-16的代理项,那么代表这个字符串应由UTF-16编码,所以应该此处应抛出解析器错误:<br>var10 = this.sgp.error();<br>代理项:除了表示使用 16 位代码点的单个字符,utf-16 编码允许抽象字符来表示使用两个 16 位码位,这被称为代理项对。 在此对的第二个元素是低代理项。 其码位的范围从 u+dc00 到 U + DFFF。 单独的代理项具有其自身; 的任何解释它是有意义的仅当使用作为代理项对的一部分。</p>
原文地址:https://segmentfault.com/a/1190000017067352
Java Web中的编码解析的更多相关文章
- JAVA WEB 中的编码分析
JAVA WEB 中的编码分析 */--> pre.src {background-color: #292b2e; color: #b2b2b2;} pre.src {background-co ...
- Java web中常见编码乱码问题(二)
根据上篇记录Java web中常见编码乱码问题(一), 接着记录乱码案例: 案例分析: 2.输出流写入内容或者输入流读取内容时乱码(内容中有中文) 原因分析: a. 如果是按字节写入或读取时乱码, ...
- Java web中常见编码乱码问题(一)
最近在看Java web中中文编码问题,特此记录下. 本文将会介绍常见编码方式和Java web中遇到中文乱码问题的常见解决方法: 一.常见编码方式: 1.ASCII 码 众所周知,这是最简单的编码. ...
- 深入分析Java Web中的编码问题
编码问题一直困扰着我,每次遇到乱码或者编码问题,网上一查,问题解决了,但是实际的原理并没有搞懂,每次遇到,都是什么头疼. 决定彻彻底底的一次性解决编码问题. 1.为什么要编码 计算机的基本单元是字节, ...
- Java Web 中使用ffmpeg实现视频转码、视频截图
Java Web 中使用ffmpeg实现视频转码.视频截图 转载自:[ http://www.cnblogs.com/dennisit/archive/2013/02/16/2913287.html ...
- 第三章 深入分析Java Web中的中文编码问题
3.1 几种常见的编码格式 3.1.1 为什么要编码 一个字节 byte只能表示0~255个符号,要表示更多的字符,需要编码. 3.1.2 如何翻译 ASCII码:有128个,用一个字节的低7位表示. ...
- 【中文乱码】深入分析 Java Web 中的中文编码问题
深入分析 Java Web 中的中文编码问题 1.几种常见的编码格式 1.1 为什么要编码 在计算机中存储信息的最小单元是 1 个字节,即 8 个 bit, 所以能表示的字符范围是 0 ~ 255 个 ...
- 深入分析Java Web中的中文编码问题
要对Java Web项目进行编码原因: 1.在计算机中存储信息的最小单位是1个字节,即8个bit,所以能表示的字符范围是0~255个. 2.电脑需要表示的符号太多.无法用1个字节完全表示. 要解决这个 ...
- 【JAVA编码专题】 JAVA字符编码系列三:Java应用中的编码问题
这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记录下来以便日后参考. 为了构成一个完整的对文字编码的认识和深入把握,以便处理在Java开发过程中遇到的各种问 ...
随机推荐
- 哈夫曼费用计算C++
#include<stdio.h> #include<string.h> #include<math.h> #include<iostream> #in ...
- hdu1162 Eddy's picture 基础最小生成树
#include <cstdio> #include <cmath> #include <cstring> #include <algorithm> # ...
- oracle 表空间及查看所有用户的表空间
用户有默认表空间,但是只能指定一个,但是你有其它表空间的限额的话,可以将表建到其它表空间中. 语法 create table xxx(xxxx xx) tablespace xxxxx 1.查看当前用 ...
- codeforces 615 B. Longtail Hedgehog (DFS + 剪枝)
题目链接: codeforces 615 B. Longtail Hedgehog (DFS + 剪枝) 题目描述: 给定n个点m条无向边的图,设一条节点递增的链末尾节点为u,链上点的个数为P,则该链 ...
- Graph HDU - 4467
https://vjudge.net/problem/HDU-4467 大概就是,设一个块大小T 对于度数<=T的点,设为1类点,在改变颜色的时候暴力查询与其相邻点,更新答案 对于度数>T ...
- Music in Car CodeForces - 746F
Music in Car CodeForces - 746F 题意很难懂啊... 题意:http://blog.csdn.net/a838502647/article/details/74831793 ...
- HttpURLConnection 发送PUT请求 json请求体 与服务端接收
发送请求: public void testHttp() { String result = ""; try { URL postURL = new URL("http: ...
- poj2282The Counting Problem(组合)
链接 计算0-9每一个数字出现的次数 逐位进行处理 对于每一位取几时依次算下组合的情况 注意0的情况需要特殊处理一下 因为0000 00 这样都是等于0的 前面的几位是多余的 #include < ...
- 取URL中各个参数的值
取参数值的方法有很多,个人记录一个方便好用的 //查询参数(参数名)function GetQueryString(name) { var reg = new RegExp("(^|& ...
- Win10 隐藏盘符
1.隐藏盘符 打开磁盘管理 -> 对要隐藏的盘符单击右键 -> 更改驱动器号和路径 -> 删除. 打开资源管理,已经看不到该盘符,该盘符已被隐藏.只是隐藏,该盘符上的数据仍然还在. ...