使用tomcat运行servlet时中文乱码的解决

电脑不是国人发明以及中国文字的博大精深让我们编程的人也时时遇到麻烦。在linux中中文问题确实头痛了很久,现在的servlet看来又有问题servlet中的问题一般有这么几个
通过网址传递过来的中文参数出现乱码,如?name=小灰到了里面就不知道变成什么玩意了。
程序内部处理乱码,正确得到中文参数处理时内部又乱码,和数据库通讯的时候又经常有这个问题。
程序将中文输出乱码。
tomcat 5.5 现在已经基本能解决这个问题
最简单的一个方法应该是使用tomcat示例中\servlets-examples\WEB-INF\classes\filters下包含的SetCharacterEncodingFilter过滤器将这个类复制到自己工程的web-inf文件夹的同一位置。然后在工程的web.xml中添加以下部分。
  <filter>
       <filter-name>Set Character Encoding</filter-name>
       <filter-class>filters.SetCharacterEncodingFilter</filter-class>
       <init-param>
           <param-name>encoding</param-name>
           <param-value>gbk</param-value>
       </init-param>
   <filter-mapping>
       <filter-name>Set Character Encoding</filter-name>
 <url-pattern>/*</url-pattern>
   </filter-mapping>
然后在conf/server.xml中的Connector标记里面添加URIEncoding="gbk"这样就解决了传递时乱码的问题。
然后还可以设
request.setCharacterEncoding("gbk");
response.setCharacterEncoding("gbk");
但是程序内部还是可能乱码,在有这种问题的时候可以进行编码转换。例如
String sr="中文";
String tf=new String(sr.getBytes("gbk"),"ISO8859_1");
这样基本能解决tomcat处理时出现乱码的情况了。
解决了这个问题。可是如果url路径中或参数中存在空格的话就有问题。把一个带空格的文本做为url上带的参数肯定不行。需要进行转码,例如我有段程序是生成一个文件下载的超链接
File file=new File("e:\中文 文件.txt");
out.println("<a href=/demo/servlet/DownLoadServlet?filename="+file.getName()+">"+file.getName()+"</a");
倘若path中带有空格,这个链接就不会正常,空格及后面文字被忽略。
生成的链接是…DownLoadServlet?filename=中文
这时就需要在out.println(…);语句前面加上这么两句
String path=file.getName();
path=java.net.URLEncoder.encode(path);
将……./DownLoadServlet?filename="+file.getName()+">"…改成
……./DownLoadServlet?filename="+path+"…….
就解决了url路径中含有空格的问题

“使用tomcat运行servlet时中文乱码的解决”的一个回复

  1. [emot]kill[/emot][emot]shock[/emot][emot]shuai[/emot][emot]stupid[/emot][emot]zan[/emot][emot]uplook[/emot][emot]shy[/emot][emot]puke[/emot][emot]fear[/emot][emot]envy[/emot][emot]pig[/emot][emot]shy[/emot][emot]shy[/emot][emot]envy[/emot][emot]fear[/emot][emot]anger[/emot][emot]puke[/emot][emot]shy[/emot][emot]sweat[/emot][emot]sweat[/emot][emot]unhappy[/emot][emot]uplook[/emot][emot]zan[/emot]

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据