再论Tomcat和STRUTS中的中文问题
Tomcat中开发WEB程序的中文问题困扰了许多人,网上也有大量讨论解决的方法。本文也准备在此讨论一下这个问题。
中文问题有两个方面:
(1)中文的显示问题
JSP页面:
这个问题只需要在JSP页面中设定如下指令就可以解决:
对于支持中文编码的具体选择,很多文章推荐利用GBK,这个当然可以,不过,利用UTF-8要更好一些,因为现在Java类库中为了能够适应国际化的需要,许多字符都是采用UTF-8进行的编码,所以,推荐采用UTF-8。
另外一点需要注意的是,在存储JSP或HTML文件时,一定要保证存储文件的编码格式要与声明的中文编码的格式相同,否则的话会由于文件的实际编码和声明的编码不一至产生乱码。大部分的专业开发工具,比如MyEclipse、Netbeans等等,都会按照文件中声明的编码格式自动存储文件,所以不会有什么问题。但是,如果利用一些简单的工具,比如Windows的记事本,它不会自动按照声明的格式存储文件。在大部分情况下,文件会按照Windows系统默认的编码格式进行存储,即GBK编码。如果声明了UTF-8,这时反而会出现乱码。不过,记事本也支持不同的文本存储编码,只是需要手工指定:使用"文件"->"另存为"菜单,在文件存储对话框最后的“编码”框中选择UTF-8就可以了。
(2)中文参数的接收和传递问题
在WEB中除去要显示中文信息之外,中文信息的接受和传递也是必不可少的。在WEB程序中,用户输入的数据和程序交互的主要方式就是利用HTTP协议的GET方法或POST方法,而用户的数据往往是由浏览器传递给Tomcat,Tomcat再交给WEB程序来处理这些数据。
鉴于这个过程,要保证正确的中文信息接受和传递,首先要保证浏览器中的传递过来的数据要正确,所以,在显示用户界面时,应该要保证在JSP或HTML中设定了正确的字符编码。其实,只要按照问题(1)中的设定,一般都不会有问题。
接下来就是程序中接受中文,此时问题稍稍有些复杂,这是由于在Tomcat不同的版本中,处理GET协议和POST协议的有不同方式造成的。
(A)Tomcat4.x
对于Tomcat4.x版本,它采用相同的方式处理HTTP协议中的get和set方法,所以,要处理这个问题,只需要在WEB程序中接受request参数时,在取出参数之前,在JSP的页面或Servlet的doGet(或doPost)利用如下代码就可以解决中文参数的获取问题:String p1=request.getParameter("p1");
对于STRUTS,也可以直接使用它在Formbean中存储的表单数据了。 1 楼 aaronfeng 2007-08-01 total test 2 楼 gazhangting 2008-01-18 (3)对于Tomcat5.x,在上述步骤的基础上,只要修改安装目录中的config/server.xml,添加参数URIEncoding,将其设置为UTF-8。
你说只要这个地方设置与页面上统一,就可以了,我发现我把这个地方改成了,UTF-8能后页面上是gbk,也没有什么问题.这个地方,还是不理解. 3 楼 dwangel 2008-01-19 gazhangting 写道(3)对于Tomcat5.x,在上述步骤的基础上,只要修改安装目录中的config/server.xml,添加参数URIEncoding,将其设置为UTF-8。
你说只要这个地方设置与页面上统一,就可以了,我发现我把这个地方改成了,UTF-8能后页面上是gbk,也没有什么问题.这个地方,还是不理解.
URIEncoding影响的是tomcat如何解释get方式通过url传递的参数,post的是另外的。
显示跟接受时解码没关系. 4 楼 galaxystar 2008-01-19 server.xml
useBodyEncodingForURI="true"
这个参数扩展性更好,表示以页面的编码作为request默认编码.