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开发过程中遇到的各种问 ...
随机推荐
- Luogu P1542包裹快递【实数域二分】 By cellur925
题目传送门 题目中说:最大值最小,显然是一个二分答案嘛qwq. 我们二分的答案显然是速度,但是由于实际中每一段的速度可能不同,所以这里我们把所有段进行的速度都定为二分出的答案. 二分的步骤好说,只是c ...
- 跟我一起玩Win32开发(21):复制&粘贴&剪贴板操作
我要提醒一下大家,看了我的博文学到的知识,千万不要用于实际开发,不然你会被你的上司骂:“妈的,这些东西哪来的,从来没有人这样做过.”不信你试试,脑细胞被冻结的经理或者技术总监们肯定会这样说的. 如果是 ...
- memcache操作
1 格式(telnet) <command name> <key> <flags> <exptime> <bytes> a) <com ...
- websocket实现群聊
server # @File: 群聊 from flask import Flask, render_template, request from geventwebsocket.handler im ...
- 一个因xdata声明引起的隐含错误
我们知道一般增强型c51自身的RAM只有128BYTES,根本不够用,所以一般在定义全局变量,静态变量时都要用XDATA作为关键字修饰数据的的存储类型.但要注意的是,定义和声明一定要一致,不然出现错误 ...
- js 判断客户端系统
function detectOS() { var sUserAgent = navigator.userAgent; var isWin = (navigator.platform == " ...
- sass+compass起步
前言:Sass is an extension of CSS that adds power and elegance to the basic language. It allows you to ...
- IO(下)
7. 标准输入.输出流 7.1 标准输入流 源数据源是标准输入设备(键盘.鼠标.触摸屏)等输入设备.在java中用http://System.in 得到一个 InputStream 字节输入流. 需求 ...
- 如何使用 Java 生成二维码
步骤 下载jar包(QRCode.jar) maven项目手动引入jar包 编写实体类实现二维码的生成 controller调用 下载jar包(QRCode.jar) 下载网址如下: QRCode生成 ...
- [ POI 2017 ] Sabota?
Description 题目链接 Solution 因为一个节点染黑了子树就都被染黑了,所以最后染黑的点集必然是一棵子树. 可以得出的结论是,如果被染黑的节点在节点 \(a\) 的子树中,而 \(a\ ...