一、编码的基础概念

首先,要想解决java中文乱码问题就有必要了解一下什么是字符,字符集,编码的概念。
字符:是文字与符号的总称,包括文字、图形符号、数学符号等,如:”a,b”,”+,*”,“中文,日文”。
字符集:就是一组抽象字符的集合字符集常常和一种具体的语言文字对应起来,该文字中的所有字符或者大部分常用字符就构成了该文字的字符集,比如英文字符集。繁体汉字字符集、日文汉字字符集等等。
字符集是一张码表,它规定了文字与数字的一一对应关系。与计算机的内部表示没有必然的联系。

计算机要处理各种字符,就需要将字符和二进制内码对应起来这种对应关系就是字符编码制定编码首先要确定字符集,并将字符集内的字符排序,然后和二进制数字对应起来。根据字符集内字符的多少,会确定用几个字节来编码。每种编码都限定了一个明确的字符集合,叫做被编码过的字符集(Coded Character Set),这是字符集的另外一个含义。

比如ASCII字符集,它规定了0~127这128个数字与哪些字符的对应关系。这就是一个字典表,我去查 0x41是大写字母 ‘A’, 0x61是小写字母’a’。这些都是在ascii码表里规定了的。

Unicode字符集(统一码、万国码、单一码、标准万国码)是业界的一种标准,它可以使电脑同时显示世界上数十种文字。

字符编码方案:把数字与汉字对应起来的方案。
常见的UTF-8字符编码,就是将二进制数字一一对应Unicode字符集中的字符。
比如:28023<–>海; 97<->”a”.

注意:Java的内核和class文件是基于unicode字符集,java默认编码方案(格式)为GBK。
常见的需要编码(一般选用UTF-8编码)的场景:
1:I/O操作
2:内存
3:数据库
4:javaWeb

4.JavaWeb中 编码解决方案:
1.关注文件本身的编码格式:设置为utf-8。如在eclipse中,点击文件属性就可查看.
2.jsp页面设置的页面编码(以什么编码进行数据排列的),pageEncoding = utf-8
3.jsp页面设置的以什么编码格式进行数据传输: contentType=”text/html; charset=UTF-8”
4.servlet中接收请求,响应时的编码: request.setCharacterEncoding(UTF-8);
response.setCharacterEncoding(UTF-8);
response.setHeader(“content-type”, “text/html;charset=UTF-8”);

5.mysql数据库中数据记录的保存编码:建立数据库时设置:utf-8
6.mysql连接驱动的db.properties中的url中:
jdbc:mysql://localhost:3306/dataBaseName?useUnicode=true&characterEncoding=utf8

7.URLEncoder(“中文”,”UTF-8”); //URL地址或中文文件名编码