编码简介

我们web程序在接收请求并处理过程中,如果不注意编码格式及解码格式,很容易导致中文乱码,引起这个问题的原因到底在哪里?如何解决?我们这个小节将会讨论此问题。

说到这个问题我们先来说一说字符集。

什么是字符集,就是各种字符的集合,包括汉字,英文,标点符号等等。各国都有不同的文字、符号。这些文字符号的集合就叫字符集。

现有的字符集ASCII、GB2312、BIG5、GB18030、Unicode等

这些字符集,集合了很多的字符,然而,字符要以二进制的形式存储在计算机中,我们就需要对其进行编码,将编码后的二进制存入。取出时我们就要对其解码,将二进制解码成我们之前的字符。这个时候我们就需要制定一套编码解码标准。否则就会导致出现混乱,也就是我们的乱码。

2.编码与解码

u 编码:将字符转换为二进制数

汉字

编码方式

编码

二进制

‘中’

GB2312

D6D0

1101 0110-1101 0000

UTF-16

4E2D

0100 1110-0010 1101

UTF-8

E4B8AD

1110 0100-1011 1000-1010 1101

u 解码:将二进制数转换为字符

1110 0100-1011 1000-1010 1101 → E4B8AD → ’中’

u 乱码:一段文本,使用A字符集编码,使用B字符集解码,就会产生乱码。所以解决乱码问题的根本方法就是统一编码和解码的字符集。

字符集与字符编码(字符编码问题讲解)(1)

3.解决乱码:

解决方法就是统一字符编码。

字符集与字符编码(字符编码问题讲解)(2)

乱码情况:

3.1接收中文请求参数

1)POST请求:post请求提交了中文。在获取参数值之前,设置请求的解码格式,使其和页面保持一致。我们以后都使用utf-8编码,它也称作万国码,集合了基本所有的字符。

解决方法:request.setCharacterEncoding("utf-8");

2)GET请求:GET请求参数是在地址后面的。不能使用上述方法。我们需要修改tomcat的配置文件。需要在Server.xml文件修改Connector标签,添加URIEncoding="utf-8"属性。

字符集与字符编码(字符编码问题讲解)(3)

3.2向浏览器发送有中文字符的响应

向浏览器发送响应的时候,要告诉浏览器,我使用的字符集是哪个,浏览器就会按照这种方式来解码。如何告诉浏览器响应内容的字符编码方案。很简单。

解决方法:response.setContentType("text/html;charset=utf-8");

或者使用这两句组合:

response.setCharacterEncoding("utf-8");

response.setHeader("Content-Type", "text/html;charset=utf-8");

我们一般使用response.setContentType("text/html;charset=utf-8");


精彩阅读:

web前端之二叉搜索树

web前端渲染优化

Webpack优化构建速度

常见web安全及防护原理

WebView和原生是如何通信

,