乱码问题产生的根本原因:
编码不一致
所有地方的编码都必须一致,有任何一个地方不一致都会造成乱码
可以编码的地方:
HTML页面、JSP页面、JAVA程序、数据流(文本流)、数据库、数据表、数据字段
如何设置编码:
HTML:<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
JSP页面:<%@ page contentType="text/html; charset=UTF-8"%>
JAVA程序:
设置请求和相应的数据流的字符编码
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=\"utf-8\"");
强制编码
String str="中文信息";
byte[] b=str.getBytes("原始的编码类型");
new String(b,"新的编码类型");
数据流(与数据库连接的流,JDBC流):
MySQL在连接字符串后面加“?characterEncoding=utf-8”
MySQL数据库:
以服务的方式运行
需要修改my.ini/my-defalut.ini配置文件,加入以下内容
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[mysql]
default-character-set=utf8
[mysql.server]
default-character-set=utf8
[mysqld_safe]
default-character-set=utf8
[client]
default-character-set=utf8
然后通过该配置文件,重新安装MySQL的服务
以进程的方式运行:
启动MySQL服务器以后,运行以下的SQL语句
SET character_set_client = utf8;
SET character_set_connection = utf8;
SET character_set_database = utf8;
SET character_set_results = utf8;
SET character_set_server = utf8;
需要注意,以SQL语句方式运行,是临时设置的系统变量,重启服务以后将恢复默认值。
数据库的编码指定:
CREATE DATABASE `databaseName`
DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci
;
数据表的编码指定:
CREATE TABLE `tableName`
DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci
;
数据字段的编码指定:
ALTER TABLE `tableName`
CHANGE `dd` `dd` VARCHAR( 45 )
CHARACTER SET utf8
COLLATE utf8_general_ci
NOT NULL
;
在数据库的脚本中,优先级最高的是字段的编码,其次是表的编码,再次是库的编码。
IDE工具编码设置:
工作空间编码设置:Window - Preperences - General - Workspace
文件内容编码设置:Window - Preperences - General - Content Types
文件保存编码设置:Window - Preperences - Web - HTML Files
文件保存编码设置:Window - Preperences - Web - CSS Files
文件保存编码设置:Window - Preperences - Web - JSP Files
修改项目编码设置:右键单击项目:Properties - Resource
修改文件编码设置:右键单击文件:Properties - Resource