banq
2003-08-16 15:47

如果都统一成UTF-8,这样中英文平台都可以使用了。每个应用系统都必须自己设计解决。

steeven
2003-08-18 12:12

utf8好像在together和eclipse中都不支持

yuci
2003-08-18 18:25

一直在用 jackyz 所说的这种方法,运行于win2k(中文)和RH6.2+gbk包/RH8.0下,中文一直没问题,所以刚开始看的时候都不知道楼主要说什么

jackyz
2003-08-20 18:30

哦,这篇旧帖居然被翻新到首页上了。

关于用UTF8编码来写源代码,似乎在 ultraedit 里面可以转换的,但,默认情况下,编译器似乎不认。也许可以通过设定编码来解决吧,我没做更多的尝试,在这点上没有发言权了。

这里更详细的解释一下我所强调的两点:

1.所有的JSP都要设定 contentType="text/html; charset=GBK", include 中设定的不起效,必须每个文件都设。

深入分析,我发现,和 tomcat 的 jasper 一样,resin 的 jsp 解析程序(JspGenerator.java)也是通过这个标志来判断源代码的编码方式,用 GBK 编码写的 jsp 文件,设定 charset=GBK 之后,即使在其他的编码方式下也能正确的解析编码格式,无需在其他地方特别设定。此时,在处理内部已经正确的转换成了 unicode 编码,一个中文被当作一个字符来对待,字符串的长度是正确的。

resin jsp 编译程序默认的编码是 iso_8859_1 ,如果处理的 jsp 文件包含中文而没有指定编码的,在处理的第一个步骤(根据 jsp 生成 .java 文件)中就已经是错误的了。虽说可以通过 iso_8859_1 的方式输出,依赖客户端的自动识别正确显示。但在处理的内部,所有的中文是以错误的方式处理的,无法直接拿来比较和运算(一个 GBK 的中文字符被当作是两个 byte 的 iso_8859_1 字符来对待)。

resin 中 jsp 标记 @page include 并不像 shtml 一样静态处理,而是用程序方式动态包含的。所以,即使在被 include 的文件中指明编码方式,它的作用域也仅限于该文件本身。主文件中包含的中文,因为没有正确的编码指定,仍会被错误解析。这就是在 include 中指定 charset 并不解决问题的原因。

2.使用 request.setEncoding("GBK") 预处理 Request 。

中文的另外一个问题是 GET 和 POST 的提交,它们常常会被错误解析,这个问题的简单解决办法就是在取得任何数据之前设定 request.setEncoding("GBK") 这样就无需手动转换每个参数。

yrlong
2003-11-04 11:26

<jsp precompile='true' static-encoding='true' recompile-on-error='true'/>

<%@ page contentType="text/html; charset=GBK"%>

我在开发中,这两句都用了,没有发现乱码.