字符编码解码
基本概念介绍
编码:是信息从一种形式或格式转换为另一种形式的过程也称为计算机编程语言的代码简称编码。用预先规定的方法将文字、数字或其它对象编成数码,或将信息、数据转换成规定的电脉冲信号
解码:是编码的逆过程
字符编码:从数字(字符)到字节数组(二进制)
字符解码:从字节数组(二进制)到数字(字符)
字符转码:字符集的转换,需要经过解码和编码过程
字符乱码:没有正确字符编码或者在字符解码时使用了与编码不一致的字符集导致的错误显示出无意义的字符
字符集合:是一组形状的集合,一般存储于字库中,例如所有汉字的集合
编码字符集:是一组字符对应的编码(即数字),为字符集合中的每一个字符给予一个数字。例如最早的编码字符集ASCII,Unicode(UCS)
字符编码方案:将字符编码(数字)映射到一个字节数组的方案。例如UTF
字符集:是编码字符集和字符编码方案的组合。例如GBK,UTF-8
字符乱码问题
情景分析
操作系统(Windows,Linux),程序软件(开发工具,编译器,浏览器),文件(.txt,.jsp),输入和输出(字节流,字符流)
图解
java乱码情景
Windows默认GBK字符集,Linux默认UTF-8
Eclipse自定义设置,
MySQL自定义设置,
Tomcat默认是ISO8859-1在server.xml配置:<Connector port="8080" ... URIEncoding="UTF-8"/>
javac编译时指定,
JSP:<%@ page language=“java” contentType=“text/html; charset=UTF-8″ pageEncoding=“UTF-8″%>
pageEncoding表明该JSP文件自身采用的编码格式,在流中以及磁盘上都用此编码格式完成字符流向字节流的转换,告诉服务器使用什么编码翻译jsp文件成java文件
contentType="text/html;charset=utf-8"服务器发送浏览器的数据类型和内容编码
charset属性指定Tomcat返回响应时采用的编码,也是post方式提交参数的编码方式
HTML:
JAVA:java变量保存转换bytes-->encode字符-->Unicode字符的转换
字节流,字符流
POST请求配置:response.setCharcacterEncoding("utf-8")