我租了一个国外空间,用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打印是乱码),但保存后的竟然是正确的中文!
<%@ 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打印是乱码),但保存后的竟然是正确的中文!
怎样能够充分利用java语言的国际化能力呢?