我租了一个国外空间,用jsp写了一个在线服务程序,面向全世界当然要用utf-8.因此我每个jsp前都加上:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" cntent="text/html;charset=utf-8"/>并且jsp文件也保存为utf-8,以为这样就可以了。但是如果表单中有中文的话,在提交目标页jsp中System.out.println输出时表单参数是乱码(因此保存到数据库中也是相同的乱码),加上:
request.setCharacterEncoding("UTF-8"); 但是完全不起作用,
为每个域都加上:
XXX=new String(XXX.getBytes("iso-8859-1"),"UTF-8");
这下可以了,System.out.println打印出了中文,而且保存到数据库中也是中文了(request.setCharacterEncoding("UTF-8")这一句完全无效,无论注释掉还是保存都没有任何影响)。我想不至于每个提交目标页面的每个表单域都要做转码吧,java不是号称支持国际化吗?更奇怪的是,我在提交目标页用httpClient把一些信息提交到一个PHP地址(因为tomcat共享空间基于安全原因不允许写文件,连log4j都没法用,但是php可以写),这个php负责写文件,这些域没有做任何转码(System.out.println打印是乱码),但保存后的竟然是正确的中文!

解决方案 »

  1.   

    为什么要写过滤器呢?除了那些英语国家,全世界用java的都要写过滤器吗?
    怎样能够充分利用java语言的国际化能力呢?
      

  2.   

    是这样的:你所写的前两行代码,只能保证该页面输出的是 UTF-8 编码的内容,而提交到该页面的编码,一般可以通过 request.setCharacterEncoding() 来转换。但是楼主为什么没有成功呢?因为服务器在此之间就已经将编码转换为 iso-8859-1 了。有的服务器确实有这种情况,楼主的程序是没问题的。
      

  3.   

    诚如3楼所言,那就很奇怪了,LZ已经在<PAGE>里面指定了页面编码,为什么服务器还会转成iso-8859-1呢。难道LZ的服务器会忽略这行代码?
      

  4.   

    您的表单不是 get 方法提交的吧