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修改过]