Java本身就支持多國語言編碼
不需要寫任何程序
可以很簡單的 實現
秘訣就是兩點
所有HTML/JSP頁面全部采用UTF
編碼
客戶端浏覽器完全支持UTF
編碼
步驟 首先把所有的HTML/JSP的ContentType都設為UTF
然後對於JSP程序中的非ASCII碼提示信息都不應該寫在程序裡面
都應該放在
application
properties裡面統一管理
對HTML用native
ascii工具統一做一次處理
把HTML中的非ASCII碼都轉換為Unicode編碼
針對不同的語言
寫不同的application
properties
比如說簡體中文是
application_zh_CN
properties
繁體中文是application_zh_TW
properties這樣
然後對這些配置信
息文件同樣用native
ascii工具處理一次
把非ASCII碼統統轉為Unicode編碼
在Servlet的request
getCharacterEncoding()獲得客戶端的操作系統默認編碼
然後set到Struts
的HTTPSession的Locale中
OK!現在不同的客戶訪問
就會顯示不同的語言版本了
你可以看看此時你的浏覽器的字符集
就是
UTF
現在你的網站和Google一樣了
嘿嘿
其實你有心的話
看看你的浏覽器訪問Google的時候是
什麼字符集吧
切記
所有的HTML/JSP都要設為UTF
編碼
所有的文件中的非ASCII碼字符都要用native
ascii工具轉
為用ASCII表示的Unicode編碼
上面所述是我從網上下的一篇於中文問題的解決方案
確切的說應該是關於Struts的國際化問題
下面我結合我的實踐談談具體如何實現Struts的國際化問題
我對理論不是非常精通
我只能完全憑自己的理解和實踐來講述
所以下面講的內容可能不是非常正確
還請大家原諒
但有一點可以肯定
我通過自己的努力解決了Struts的中文問題
並實現Struts的國際化
其實一切並不復雜
下面是具體步驟
遇到的問題(這些問題也許不會同時出現)
a
中文數據從數據庫中到jsp中後就變成了
????
b
做好的中文properties文件
其中的中文value在頁面顯示亂碼
c
jsp文件中的中文到浏覽器後顯示時也是亂碼(建議不要在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文件夾下你指定的地方
這裡是放在/web
inf/classes/com/wiley 下
它們分別是
ApplicationResources
properties (英文資源文件)
ApplicationResources_zh
properties (中文資源文件)
隨便用什麼工具編寫都行啊!
將ApplicationResources_zh
properties轉碼成gb
上面引文說要轉成UTF
結果我試了
不行
轉成gb
就行了
操作是
將ApplicationResources_zh
properties更名為ApplicationResources_xx
properties
在DOS命令行進入ApplicationResources_xx
properties所在的文件夾
使用命令
native
ascii
encoding gb
ApplicationResources_xx
properties ApplicationResources_zh
properties(至於你為什麼會出現
native
ascii不是內部命令
請查其它資料
可能你要設置環境變量
因為他是jdk的文件夾bin下的一個應用程序)
接下來配置struts
config
xml
很簡單
我們加入
就行了
到此已能解決大多數中文問題
如上面所說的a
b
e 現在打開浏覽器
選擇菜單
工具》internet選項》語言
將
中文-中國[zh
cn]
刪掉
添加一個
英語-英國[zh
gb]
確定後
重啟Tomcat
輸入網址你就會發現
你的頁面的文本信息就會用的是ApplicationResources
properties (英文資源文件)中的內容
如果換回
中文-中國[zh
cn]
它就會顯示ApplicationResources_zh
properties (中文資源文件)中的中文內容
至於問題
c
jsp文件中的中文到浏覽器後顯示時也是亂碼
你就要用與第
步類似的方法來重新對*
jsp 文件編碼
這時
encoding的參數就要用UTF
了
如果你用的也是struts studio
pro for eclipse工具
這一步就免了
它會自動用UTF
的格式存儲
至於問題
d
由jsp傳給bean的中文值
再由bean傳回頁面又是亂碼
的解決
我只是加了個過濾器
你可以現在web
xml中加入
Set Character Encoding
com
wiley
SetCharacterEncodingFilter
encoding
utf
ignore
true
Set Character Encoding
action
然後在你指定的包內加個java文件 我放在了/web
inf/classes/com/wiley 裡
下面是源代碼
/*
* XP Forum
*
* Copyright (c)
RedSoft Group
All rights reserved
*
*/
package com
huahang
tj
struts
filters;
import javax
servlet
*;
import java
io
IOException;
/**
*
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 Accept
Language
* and User
Agent headers
or a value stashed in the current
* user´s session
*
* @author John Wong
*
* @version $Id: SetCharacterEncodingFilter
java
v
/
/
:
:
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() {
this
encoding = null;
this
filterConfig = 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 || (request
getCharacterEncoding() == null)) {
String encoding = selectEncoding(request);
if (encoding != null)
request
setCharacterEncoding(encoding);
}
// Pass control on to the next
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28154.html