jsp+jqueryeasUI+mysql乱码 skyCc

首先说明几点:
在文件中任何时候出现utf-8、UTF-8、utf8、UTF8其作用都是一样的。但是标准形式是:UTF-8。网上许多文章还煞有介事的特别指出其一个个的区别,纯属无稽之谈。

我使用的软件环境:
中文WIN7(linux可作相应修改)
Apache Tomcat 6.0 Server
MyEclipse 8.5GA
phpMyAdmin 3.2.5
MySQL 5.2.12-nt

按下面步骤修改:

一、在JSP静态文件中正确显示UTF-8:

1、JSP文件用支持UTF-8的文字编辑器编辑,如EditPlus、UltraEdit,并把原来ascii转换成utf-8(菜单里有)。

2、JSP文件头改成:
<%@ page contentType="text/html; charset=UTF-8" language="java" import="java.sql.*"%>
有无这句无所谓(但在.html文件中是必要的):
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
</head>

二、FORM的正确提交:

1、java文件中getParameter之前加入:
request.setCharacterEncoding("utf-8");
这一步也可以用Filter加入过滤器的办法,参见其它文章。

2、request时,只需要写成最简单的形式:
String name1= new String(request.getParameter("username"));
String pwd1= new String(request.getParameter("password"));
(补充:为了更好地防止乱码,可以采用两次(jsp文件中JavaScript)encodeURI方法以及对应java文件中一次URLdecoder.decode()方法。)

三、连接mysql:

1、mysql配置文件:
修改mysql在windows\my.ini里default-character-set=utf8
(补充:可以在命令行中修改:set names utf-8,这个我没试过,但是我之前建数据库时是使用的utf8_unicode_ci进行整理,连接校对为utf8_general_ci,之后在命令行中使用MYSQL命令行进行了所有设置:
mysql> SET character_set_client = utf8 ;
     mysql> SET character_set_connection = utf8 ;
     mysql> SET character_set_database = utf8 ;
     mysql> SET character_set_results = utf8 ;
     mysql> SET character_set_server = utf8 ;

     mysql> SET collation_connection = utf8 ;
     mysql> SET collation_database = utf8 ;
     mysql> SET collation_server = utf8 ;(这三项相当于SET names utf8;)
但是后来存在一个问题,那就是从命令行插入数据,在phpmyadmin里面还是乱码,在JSP页面显示出来的也是乱码,用命令行进行查询也是乱码,后来我又用了SET names GBK;但是不是所有的都改变了,也不知道怎么回事,运行以下命令如下:

show variables like '%character%';
--------------------------+-------------------------------------
character_set_client     | gbk
character_set_connection | gbk
character_set_database   | utf8
character_set_filesystem | binary
character_set_results    | gbk
character_set_server     | utf8
character_set_system     | utf8
character_sets_dir       | F:\Web\MySQL-5.0.89\share\charsets\

mysql> show variables like '%collation%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | gbk_chinese_ci |
| collation_database   | utf8_unicode_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)
反正这样之后从mysql命令行到phpmyadmin插入中文和显示都没有问题。但是每次运行命令行插入中文数据之前都要SET names gbk;才能正常插入中文数据。

2、mysql里数据库和表也都设为utf8_unicode_ci

3、数据库连结:jdbc:mysql://localhost/mydb?useUnicode=true&characterEncoding=utf-8
注意,关键就在于此:在.java和.jsp文件中此句中间是'&'而不是'&amp;',但是在.xml文件中需要是'&amp;';
至此,在页面上显示中文、从数据库读取并显示、插入、修改中文都正常了。
并且由于是utf-8,您可以试一下,在form里同时输入中文、英文、日文、韩文,照样正常显示。

虽然没有完全测试过,但在我的使用中操作系统、JDK、TOMCAT或resin的编码对此问题没有造成影响。
我测试时初始化显示的JDK就是GBK、zh,但没有问题。
另外,.java文件是utf-8还是ascii编码都没有关系,生成的.class一样能用。

至此大功告成,编码问题可以说是解决了。

原文地址:https://www.cnblogs.com/cmzcheng/p/2426128.html