Java本身就支持多国语言编码不需要写任何程序可以很简单的 实现 秘诀就是两点
所有HTML/JSP页面全部采用UTF编码
客户端浏览器完全支持UTF编码
步骤
首先把所有的HTML/JSP的ContentType都设为UTF
然后对于JSP程序中的非ASCII码提示信息都不应该写在程序里面都应该放在
applicationproperties里面统一管理
对HTML用nativeascii工具统一做一次处理把HTML中的非ASCII码都转换为Unicode编码
针对不同的语言写不同的applicationproperties比如说简体中文是
application_zh_CNproperties繁体中文是application_zh_TWproperties这样然后对这些配置信
息文件同样用nativeascii工具处理一次把非ASCII码统统转为Unicode编码
在Servlet的requestgetCharacterEncoding()获得客户端的操作系统默认编码然后set到Struts
的HTTPSession的Locale中
OK!现在不同的客户访问就会显示不同的语言版本了你可以看看此时你的浏览器的字符集就是
UTF现在你的网站和Google一样了嘿嘿其实你有心的话看看你的浏览器访问Google的时候是
什么字符集吧
切记所有的HTML/JSP都要设为UTF编码所有的文件中的非ASCII码字符都要用nativeascii工具转
为用ASCII表示的Unicode编码
上面所述是我从网上下的一篇于中文问题的解决方案确切的说应该是关于Struts的国际化问题下面我结合我的实践谈谈具体如何实现Struts的国际化问题我对理论不是非常精通我只能完全凭自己的理解和实践来讲述所以下面讲的内容可能不是非常正确还请大家原谅但有一点可以肯定我通过自己的努力解决了Struts的中文问题并实现Struts的国际化其实一切并不复杂下面是具体步骤
遇到的问题(这些问题也许不会同时出现)
a中文数据从数据库中到jsp中后就变成了????
b做好的中文properties文件其中的中文value在页面显示乱码
cjsp文件中的中文到浏览器后显示时也是乱码(建议不要在jsp文件中输入中文尽量放在properties文件中)
d由jsp传给bean的中文值再由bean传回页面又是乱码
e当更换本地浏览器的语言选项时Web应用程序不能自动根据你的locale选择合适的*properties文件导致Web应用程序不能国际化
环境
Web服务器 Tomcat
操作系统 Win Server
JVM jdk
数 据 库 Oracle
开发工具 struts studio pro for eclipse
先将所有*jsp 网页中开头处加入
再设置
然后编辑好两个*properties文件放在classes文件夹下你指定的地方这里是放在/webinf/classes/com/wiley 下它们分别是
ApplicationResourcesproperties (英文资源文件)
ApplicationResources_zhproperties (中文资源文件)
随便用什么工具编写都行啊!
将ApplicationResources_zhproperties转码成gb上面引文说要转成UTF结果我试了不行转成gb就行了操作是
将ApplicationResources_zhproperties更名为ApplicationResources_xxproperties
在DOS命令行进入ApplicationResources_xxproperties所在的文件夹
使用命令nativeascii encoding gb ApplicationResources_xxproperties ApplicationResources_zhproperties(至于你为什么会出现nativeascii不是内部命令请查其它资料可能你要设置环境变量因为他是jdk的文件夹bin下的一个应用程序)
接下来配置strutsconfigxml很简单我们加入 就行了
到此已能解决大多数中文问题如上面所说的abe 现在打开浏览器选择菜单工具》internet选项》语言将中文-中国[zhcn]删掉添加一个英语-英国[zhgb]确定后重启Tomcat输入网址你就会发现你的页面的文本信息就会用的是ApplicationResourcesproperties (英文资源文件)中的内容如果换回中文-中国[zhcn]它就会显示ApplicationResources_zhproperties (中文资源文件)中的中文内容
至于问题cjsp文件中的中文到浏览器后显示时也是乱码 你就要用与第步类似的方法来重新对*jsp 文件编码这时encoding的参数就要用UTF了如果你用的也是struts studio pro for eclipse工具这一步就免了它会自动用UTF的格式存储
至于问题d由jsp传给bean的中文值再由bean传回页面又是乱码的解决我只是加了个过滤器
你可以现在webxml中加入
Set Character Encoding
comwileySetCharacterEncodingFilter
encoding
utf
ignore
true
Set Character Encoding
action
然后在你指定的包内加个java文件 我放在了/webinf/classes/com/wiley 里下面是源代码
/*
* XP Forum
*
* Copyright (c) RedSoft Group All rights reserved
*
*/
package comhuahangtjstrutsfilters;
import javaxservlet*;
import javaioIOException;
/**
*
Filter that sets the character encoding to be used in parsing the
* incoming request either unconditionally or only if the client did not
* specify a character encoding Configuration of this filter is based on
* the following initialization parameters:
*
*
encoding The character encoding to be configured
* for this request either conditionally or unconditionally based on
* the ignore initialization parameter This parameter
* is required so there is no default
*
ignore If set to true any character encoding
* specified by the client is ignored and the value returned by the
* selectEncoding() method is set If set to false
* selectEncoding() is called only if the
* client has not already specified an encoding By default this
* parameter is set to true
*
*
*
Although this filter can be used unchanged it is also easy to
* subclass it and make the selectEncoding() method more
* intelligent about what encoding to choose based on characteristics of
* the incoming request (such as the values of the AcceptLanguage
* and UserAgent headers or a value stashed in the current
* user´s session
*
* @author John Wong
*
* @version $Id: SetCharacterEncodingFilterjavav // :: johnwong Exp $
*/
public class SetCharacterEncodingFilter implements Filter {
// Instance Variables
/**
* The default character encoding to set for requests that pass through
* this filter
*/
protected String encoding = null;
/**
* The filter configuration object we are associated with If this value
* is null this filter instance is not currently configured
*/
protected FilterConfig filterConfig = null;
/**
* Should a character encoding specified by the client be ignored?
*/
protected boolean ignore = true;
// Public Methods
/**
* Take this filter out of service
*/
public void destroy() {
thisencoding = null;
thisfilterConfig = null;
}
/**
* Select and set (if specified) the character encoding to be used to
* interpret request parameters for this request
*
* @param request The servlet request we are processing
* @param result The servlet response we are creating
* @param chain The filter chain we are processing
*
* @exception IOException if an input/output error occurs
* @exception ServletException if a servlet error occurs
*/
public void doFilter(ServletRequest request ServletResponse response
FilterChain chain)
throws IOException ServletException {
// Conditionally select and set the character encoding to be used
if (ignore || (requestgetCharacterEncoding() == null)) {
String encoding = selectEncoding(request);
if (encoding != null)
requestsetCharacterEncoding(encoding);
}
// Pass control on to the next