再论J2EE开发中的编码问题,统一使用UTF-8以适应多语种J2EE开发

时间:2022-04-21 16:51:31

         使用的开发平台为:

                 Tomcat 5.5.18+JDK1.5.0.6+mysql4.1.14

                 Eclipse 3.11

                 Spring+Hibernate+SiteMesh

         1.数据库方面

                 库表直接使用UTF-8编码,连接时也采用UTF-8编码

                 如果是mysql4.0的话,默认内部使用Itan1编码,但可以指定连接的编码为UTF-8编码

        2.Tomcat配置方面

                以前,主要是两个方面修改:

                 A.conf/Server.xml中加入URIEncoding参数 解决Get提交的乱码问题

                 B.conf/web.xml 指定多个Encoding参数  解决Jsp编译时的乱码问题

                 C.编写一个filter,处理Post提交的编码问题

                这一次发现这么做,还是有一定的问题,当Tomcat加载多个编码版本的应用时,就会发生问题

                查资料发现可以,在conf/server.xml加入useBodyEncodingForURI="true" 参数

                那么,系统会自动将Get和Post处理的编码一致

                而conf/web.xml的修改,也可以通过在所有的jsp页面前,加入pageencoding="utf-8"解决

                所以,最终,我以下方式

                A.conf/server.xml 增加 useBodyEncodingForURI="true"

                B.所有的Jsp页面前,加入PageEncoding="utf-8"

                C.使用filter,可以采用自己编写的,也可以使用Spring提供的,设置编码格式utf-8

      3.Java代码编译

              设置编译java代码时,使用utf-8编译

      4.静态文件和其他文件的保存

              统一采用UTF-8编码保存

      5.URL编码的传递过程中

             以前用的是urlencode(String),现在改为urlencode(String,String),其中后一个参数为"utf-8"

      6.下载的文件名

            不能直接支持中文的文件名,需要采用读取文件内容,传输到IE客户端,并附加中文文件名的方式

       7.读取某些静态文件后,输出的乱码问题

            首先,保证静态文件统一用UTF-8编码保存,其次,读取和输出内容时,均用UTF-8编码

             如读取:

             java.io.BufferedReader bf = new java.io.BufferedReader(new  java.io.InputStreamReader(new java.io.FileInputStream(fName),"utf-8"));   

            又如输出静态文件:

             OutputStreamWriter  bufferedWriter =new  OutputStreamWriter(new FileOutputStream(targetfile),"utf-8");   

      通过以上方法,新建立的代码框架中,默认使用的就是UTF-8编码,而且可以很好的支持中文和其他语言.