最近修改一个BS项目遇到一个很奇怪的读取中文的问题。请各位帮忙看看应该如何解决?原有项目是通过php 写入中文数据到mysql 5版本中。通过php的程序显示网页也一切正常。数据库建立指定了utf-8 。表单建立也指定了utf-8(DEFAULT CHARSET=utf8;)。这些都已经确认。
原始文本串内容是:“测试发布者 - flash版位1”。
然后我安装navicat 进行客户端查看数据。这个时候有2种情况。
1。如果我在navicat的连接里面指定是 使用 65001 (UTF-8) 连接字符串。并且取消选择use mysql character set 选项。数据显示是中文:“测试发布者 - flash版位1”。正常。
2。如果我在navicat的连接里面选择use mysql character set 选项。这个时候数据显示不正常。字符串内容变为:“测试发布者 - flash版位1”。不正常。然后,我写一个jsp程序(JDK 5,mysql驱动5.04版本),通过hibernate(hibernate3)进行PO方式连接。在hibernate里面配置的连接URL是:jdbc:mysql://127.0.0.1/max?useUnicode=true&characterEncoding=UTF-8。
jsp本身是utf-8编码。加上了<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 和 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 语句。
这个jsp程序不写数据库。仅仅需要把这个字段内容读取出来。现在出现了这种情况。
1。如果我把内容直接打印出来,通过在浏览器上显示的是字符串是"&aelig;&micro;&#8249;è&macr;&#8226;&aring;&#143;‘&aring;&cedil;&#402;者 - flash&ccedil;‰&#710;&auml;&frac12;&#141;1".和上面通过client未指定utf-8连接显示的一样的乱码。
2。如果我对结果字符串进行new String(string.getBytes("latin1"),"UTF-8"));处理,显示成:“&#65533;?&#65533;?&#65533;?&#65533;?&#65533;?? - flash&#65533;??位1'”。
3。如果我对结果字符串进行new String(string.getBytes("UTF-8"),"UTF-8"));处理,显示成'&aelig;&micro;&#8249;è&macr;&#8226;&aring;&#143;‘&aring;&cedil;&#402;者 - flash&ccedil;‰&#710;&auml;&frac12;&#141;1'”。和上面通过client未指定utf-8连接显示的一样的乱码。
 现在的调试的过程以及产生的结果初步分析下来看。
好像是 这个jsp使用的连接种utf-8的连接方式并没有产生作用。
请教各位,这种情况是否遇到过。应该如何解决?有正确思路和方案的,一定重分酬谢!!

解决方案 »

  1.   

    1.中文化问题
     
    页面中文:
    <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
    编码中文:
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    提交时候 中文编码
    <%
    request.setCharacterEncoding("GB2312");
    %>
     
    2.数据库连接问题
      (1) 这里特指连接MYSQL数据库的问题
     <%
      //for mysql
       Class.forName("org.gjt.mm.mysql.Driver").newInstance();
       Connection conn=java.sql.DriverManager.getConnection("jdbc:mysql://127.0.0.1/mysql?user=test&password=&useUnicode=true&characterEncoding=utf8");
       Statement stmt=conn.createStatement();
       %>