文选流氓 发表于 2003-5-11 22:38

1-1-16-2-9 两种编码类型如何转换(GB2312<->8859_1)

发信人: maquan ('ma:kju), 信区: Java
标题: Re: 两种编码类型如何转换(GB2312<->8859_1)
发信站: BBS 水木清华站 (Mon May 20 09:27:58 2002)


【 在 t20sc (学Java,可是从来不考认证) 的大作中提到: 】
: 标题: Re: 两种编码类型如何转换(GB2312<->8859_1)
:这个问题我也发现了,所以我用了比较土的方法来解决
: 【 在 maquan ('ma:kju) 的大作中提到: 】
: : 是啊,这就是我说的那个可能的后遗症:(
: : 用转换的方法可以解决问题。
: : 可是,总觉得这样“凑合”不是彻底的办法。事实上,如果你的程序原封不动地
: : 拿到另一个 Server 上去,很有可能从 request 得到的字符串就又是 gb2312 的
: : 了,那时候怎么办?难道把程序再改回来?
: : 所以,我想可能需要想个办法,怎么才能控制从 request 得到的字符串的编码方式。
: : 只是我现在还没找到方法。

简单研究了一下,发现了一些迹象,但还不能确定是否已经解决了。

我用的是 weblogic 6.0,在部署一个 application 时,可以指定 inputCharset,
方法是在 web.xml 中定义一个 InitParameter,名字是
“weblogic.httpd.inputCharset./”,值就是“gb2312”之类的了。

weblogic 中实现的 HttpServletRequest 是按照下面的逻辑来确定以何种 encoding
来解析一个 request 的:

1. 首先看 HTTP Header 中是否有 content-type 的指定,如果有则用之。
2. 否则,从 web.xml 中以 InitParameter 的方式读出 inputCharset 的映射,
   甚至可以给特定的 URL 设定专门的 encoding。
3. 如果没有读到 inputCharset 的映射,则用系统默认的 encoding 创建
   InputStream,并进而创建 Reader 来解析 request.

方法是有了,但只使用于 weblogic,看来不同的 Application Server 的处理
方式可能是不同的。但也许原则上应该都有这方面的设置吧……


--
□□□□□□□□□□□□□
□                      □
□忍以明志勤以致远□
□                      □
□□□□□□□□□□□□□


※ 来源:·BBS 水木清华站 bbs.edu.cn·
页: [1]
查看完整版本: 1-1-16-2-9 两种编码类型如何转换(GB2312<->8859_1)