不知道是哪里出的问题

07-08-08 raulliran

mysql 的 Encoding 是gb2312

页面的设置也是<%@ page contentType="text/html; charset=gb2312" %>

按理说表单传过来的中文,经过String test=new String(request.getParameter("aa").getBytes("ISO8859_1"));

转换,就应该没问题了啊,但是还是显示"???",真不知道该怎么办了?到底是哪里除了问题呢??

我用的是tomcat5.5

winit
2007-08-11 17:38

修改mysql的配置文件(windows下为my.ini),将其中的两个default-character-set都设置成为UTF8。

在创建数据库时说明其编码格式,例如:create database test character set utf8; 或者将某个表或字段设置成为utf8(具体方式见mysql文档),同时在使用mysql的jdbc驱动连接数据库的时候,使用的url后面添加:?useUnicode=true&characterEncoding=UTF8。

注意:如果只是中文的话字符集也可以设置成为gbk或gb2312

试一试看行不?

goldlive
2007-08-14 11:07

在tomcat\conf\server.xml中,给节点connector加一个属性URIEncoding="GBK"

<Connector

port="8090" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

enableLookups="false" redirectPort="8443" acceptCount="100"

debug="0" connectionTimeout="20000"

disableUploadTimeout="true" URIEncoding="GBK"/>

也可以使用过滤器

goldlive
2007-08-14 11:13

我记得好像这样用

String test = new String(request.getParameter("aa").getBytes("ISO-8859-1"),"GB2312");

raulliran
2007-08-15 10:20

banq说得没错,jsp中文乱码是java程序员的噩梦

我现在页面有:

<%@ page contentType="text/html; charset=gb2312"%>

<%@ page pageEncoding="gb2312"%>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<%request.setCharacterEncoding("gb2312");%>

在tomcat\conf\server.xml里

<Connector

port="8090" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

enableLookups="false" redirectPort="8443" acceptCount="100"

debug="0" connectionTimeout="20000"

disableUploadTimeout="true" URIEncoding="GBK"/>

我觉得现在已经不是在页面写什么语句的问题了,因为我已经在网上找了很久了,该试的我几乎都试过了。我觉得应该是我的配置文件的问题比如:修改*.xml里的代码,上面那个我试了试,还是不行

另外值得提一句:根据我的分析应该是和我第一次用netbeans有关系,它新建页面后自动生成的代码,都是把页面设置成UTF-8的编码,是我手动修改成上面的代码的,是不是netbeans也自动修改某个配置文件呢?

我有一个问题:我想把字符都统一成gb2312。页面上都是gb2312,xml里是写GBK没关系吧?还是无论在什么地方都必须写成gb2312。

(我知道GBK是gb2312的扩充,但是不知道这样写行不行)

还有一个问题:在我的webapps\ROOT里,只要是我的WEB-INF文件夹下都有一个web.xml,我打开一看有<?xml version="1.0" encoding="UTF-8"?>

于是我久把我的工程文件根目录里的WEB-INF下的web.xml,改成<?xml version="1.0" encoding="gb2312"?>,这样改对吗?

这个语句是说的什么编码

我的理解的编码原理(从客户端到TOMCAT再到数据库)是:

首先将jsp文件中的中文处理统一成gb2312格式,WEB容器就把JSP文件从gb2312格式转化为UNICODE格式,编译成Servlet类。

当客户端请求它时,WEB容器调用JVM来运行Servlet,JVM先以UNICODE编码将Servlet写入内存,当需要接受从客户端传来的中文字符时,由于编写了request.setCharacterEncoding("gb2312"),WEB容器会默认采用gb2312来接受传入的值并在JVM中转化为UNICODE格式的保存在WEB容器的内存中

(将从客户端输入的中文字符写入数据库)JDBC首先是把程序内部的UNICODE编码格式的数据转化为ISO-8859-1的格式,然后传递到数据库,由于mysql设定的字符集是bg2312的,所以数据库将ISO-8859-1格式自动转成gb2312格式

也就是说gb2312(客户端)->UNICODE(内存)->ISO-8859-1(JDBC)->gb2312(数据库)

以上就是我认为的编码格式的转换原理,我估计应该有不对的地方,否则中文问题早就解决了,希望各位大虾指点,帮我脱离jsp中文乱码的苦海!我真的受不了了!

我写的有些乱,问题很杂,回答时请注明回答的是哪个问题,谢谢

[该贴被raulliran于2007年08月15日 10:24修改过]

2Go 1 2 下一页