`
kiki1120
  • 浏览: 314595 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

中文问题和国际化问题的终极解决方案

阅读更多

Java本身就支持多国语言编码,不需要写任何程序,可以很简单的 实现。 秘诀就是两点:
  
  1、所有HTML/JSP页面全部采用UTF-8编码
  
  2、客户端浏览器完全支持UTF-8编码
  
  步骤:
  1、首先把所有的HTML/JSP的ContentType都设为UTF-8
  
  2、然后对于JSP程序中的非ASCII码提示信息都不应该写在程序里面,都应该放在
  application.properties里面统一管理。
  
  3、对HTML用native2ascii工具统一做一次处理,把HTML中的非ASCII码都转换为Unicode编码。
  
  4、针对不同的语言,写不同的application.properties,比如说简体中文是
  application_zh_CN.properties,繁体中文是application_zh_TW.properties这样,然后对这些配置信
  息文件同样用native2ascii工具处理一次,把非ASCII码统统转为Unicode编码。
  
  5、在Servlet的request.getCharacterEncoding()获得客户端的操作系统默认编码,然后set到Struts
  的HTTPSession的Locale中。
  
  OK!现在不同的客户访问,就会显示不同的语言版本了。你可以看看此时你的浏览器的字符集,就是
  UTF-8。现在你的网站和Google一样了,嘿嘿,其实你有心的话,看看你的浏览器访问Google的时候是
  什么字符集吧
  
  切记:所有的HTML/JSP都要设为UTF-8编码,所有的文件中的非ASCII码字符都要用native2ascii工具转
  为用ASCII表示的Unicode编码。
  
  --------------------------------------
  上面所述是我从网上下的一篇于中文问题的解决方案,确切的说应该是关于Struts的国际化问题,下面我结合我的实践谈谈具体如何实现Struts的国际化问题,我对理论不是非常精通,我只能完全凭自己的理解和实践来讲述,所以下面讲的内容可能不是非常正确,还请大家原谅。但有一点可以肯定,我通过自己的努力解决了Struts的中文问题,并实现Struts的国际化,其实一切并不复杂,下面是具体步骤:
  
  0.遇到的问题(这些问题也许不会同时出现)
  a.中文数据从数据库中到jsp中后就变成了"????"
  b.做好的中文properties文件,其中的中文value在页面显示乱码
  c.jsp文件中的中文到浏览器后显示时也是乱码(建议不要在jsp文件中输入中文,尽量放在properties文件中)
  d.由jsp传给bean的中文值,再由bean传回页面又是乱码
  e.当更换本地浏览器的语言选项时,Web应用程序不能自动根据你的locale选择合适的*.properties文件。导致Web应用程序不能国际化。
  1.环境:
  Web服务器: Tomcat 5.0.19
  操作系统: Win2000 Server
  JVM : jdk 1.4
  数 据 库: Oracle 8.1.7
  开发工具: struts studio 5.2 pro for eclipse
  2.先将所有*.jsp 网页中开头处加入
  
  再设置
  3.然后编辑好两个*.properties文件,放在classes文件夹下你指定的地方,这里是放在/web-inf/classes/com/wiley 下,它们分别是:
  
  ApplicationResources.properties (英文资源文件)
  ApplicationResources_zh.properties (中文资源文件)
  随便用什么工具编写都行啊!
  4.将ApplicationResources_zh.properties转码成gb2312。上面引文说要转成UTF-8,结果我试了,不行。转成gb2312就行了,操作是。
  将ApplicationResources_zh.properties更名为ApplicationResources_xx.properties
  在DOS命令行进入ApplicationResources_xx.properties所在的文件夹
  使用命令:native2ascii -encoding gb2312 ApplicationResources_xx.properties ApplicationResources_zh.properties(至于你为什么会出现“native2ascii不是内部命令”,,请查其它资料,可能你要设置环境变量,因为他是jdk的文件夹bin下的一个应用程序)
  5.接下来配置struts-config.xml,很简单,我们加入: 就行了;
  
  到此已能解决大多数中文问题。如上面所说的a,b,e 现在打开浏览器,选择菜单:工具》internet选项》语言,将“中文-中国[zh-cn]”删掉,添加一个“英语-英国[zh-gb]”确定后,重启Tomcat,输入网址你就会发现,你的页面的文本信息就会用的是ApplicationResources.properties (英文资源文件)中的内容。如果换回“中文-中国[zh-cn]”,它就会显示ApplicationResources_zh.properties (中文资源文件)中的中文内容。
  
  至于问题“c.jsp文件中的中文到浏览器后显示时也是乱码” 你就要用与第4步类似的方法来重新对*.jsp 文件编码,这时-encoding的参数就要用UTF-8了,如果你用的也是struts studio 5.2 pro for eclipse工具,这一步就免了。它会自动用UTF-8的格式存储。
  至于问题“d.由jsp传给bean的中文值,再由bean传回页面又是乱码”的解决,我只是加了个过滤器。
  你可以现在web.xml中加入:
  
  Set Character Encoding
  com.wiley.SetCharacterEncodingFilter
  
  encoding
  utf-8
  
  ignore
  true
  
  Set Character Encoding
  action
  
  然后在你指定的包内加个java文件 我放在了/web-inf/classes/com/wiley 里,下面是源代码:
  /*
  * XP Forum
  *
  * Copyright (c) 2002-2003 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 1.1 2002/04/10 13:59:27 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

分享到:
评论

相关推荐

    struts中文问题,struts国际化问题——终极解决方案

    ### Struts中文问题与国际化问题——终极解决方案深度解析 #### 引言 在Web应用开发中,特别是使用Struts框架时,中文显示和国际化(Internationalization,简称i18n)问题是开发者常遇的挑战。本文将深入探讨解决...

    乱码问题终极解决方案

    本篇文章将针对"乱码问题终极解决方案"这个主题,深入探讨在Java、JSP和Ajax中如何有效地预防和解决乱码问题。 首先,我们要理解乱码产生的原因。乱码通常是因为字符编码不一致导致的,比如文件编码、程序内部编码...

    QT国际化中文

    在进行国际化(Internationalization,简称i18n)时,QT提供了一套完整的解决方案,以确保程序在不同语言环境下的正确显示。"QT国际化中文"通常涉及到的问题是,在非UTF-8编码环境下,中文字符可能出现乱码,这是...

    java中文乱码终极解决方案

    本文将深入探讨Java中解决中文乱码的终极策略,帮助开发者彻底摆脱这个困扰。 首先,我们要理解Java中的字符编码体系。Java采用Unicode作为其内部编码,这使得它能够处理世界上几乎所有的字符集。然而,当与外部...

    Java-J2EE中文问题终极解决之道.doc

    本文旨在探讨Java-J2EE中文问题的终极解决之道,通过对现有解决方案的分析,提出一套全面且有效的处理方案。 #### 二、传统的解决方案及其局限性 ##### 1. 字节码转换方法 最古老的方法之一是利用`String`类的字节...

    TDD:通过大量测试寻找最优解决方案.docx

    3. **字符编码格式**:针对中文处理和国际化的需要,作者测试了GB2312、UTF-8和ASCII。GB2312适合中文,UTF-8则支持国际化,ASCII则不适合处理二进制数据。最终,作者选择了一种名为ISO-8551的8位编码格式,它更适合...

    Qt操作Oracle解决汉字乱码方案

    ### Qt操作Oracle解决汉字乱码方案 在使用Qt进行Oracle数据库操作时,可能会遇到一个常见的问题:汉字乱码。这主要是因为Qt与Oracle之间字符集设置不一致导致的。本文将详细介绍两种解决Qt操作Oracle时出现汉字乱码...

    方正智思企业竞争情报系统解决方案.doc

    北大方正技术研究院依据市场需求,成功推出企业竞争情报系统解决方案,面对复杂多变的市场环境,在第一时间掌握市场及竞争对手的动态和变化,使企业的市场运作由被动转为主动,最终赢得市场的竞争优势。 系统架构:...

    Struts2乱码终极解决办法

    本文将详细介绍如何彻底解决Struts2中的乱码问题,并提供实际可行的解决方案。 #### 二、乱码产生的原因 在Struts2框架中,中文乱码主要由以下几个方面的原因造成: 1. **请求编码问题**:客户端发送请求时未指定...

    freemarker 中文乱码解决

    在处理Freemarker模板引擎时,中文乱码问题是一个常见的挑战,尤其是在国际化应用中。Freemarker是一款功能强大的模板引擎,被广泛应用于Web开发中,用于动态生成HTML、XML等文本格式的页面。然而,当涉及到非英文...

    办公室自动化、办公自动化与OA (21).pdf

    总结而言,办公自动化历经数十年的发展,已经从最初的概念演变成一个包含信息化、网络化、智能化等多个方面、全方位的现代办公解决方案。它不仅仅局限于办公室环境,更广泛地应用于企业和政府等多个领域,其目的在于...

    乱码问题解决

    通过对字符编码的理解、正确设置响应头以及对输出流的精确控制,可以有效避免乱码的出现,提高Web应用的国际化和用户体验。希望本文提供的方法能帮助开发者在遇到类似问题时,快速定位并解决问题。

    jQuery ajax在GBK编码下表单提交终极解决方案(非二次编码方法)

    现在,针对GBK编码环境下使用jQuery AJAX提交表单的问题,文章提出了一个终极解决方案,也就是非二次编码方法。这种方法避免了复杂的编码解码过程,可以有效解决问题。 核心思想是这样的:由于GBK和UTF-8编码是不同...

    EhLib V5.6.215 FS,修正粘贴中文时乱码和部分汉化

    在5.6.215这个更新中,开发者已经解决了这个问题,使得EhLib能够正确处理中文字符,确保用户在输入和复制粘贴中文文本时不会遇到乱码问题,提升了用户体验和程序的国际化能力。 描述中的"修正部分汉化",指的是...

    Android汉字转拼音

    6. **实际应用**:汉字转拼音在Android应用中有多种用途,如搜索建议(将用户输入的汉字转换为拼音进行关键词匹配)、语音识别(将录音转换为文本时需要汉字转拼音)和国际化(为英文用户显示汉字的拼音表示)。...

    罗克韦尔自动化 RSBizWare Plantmetrics技术数据(中文).pdf

    罗克韦尔自动化公司的RSBizWare PlantMetrics是一款集成了多种信息技术(IT)和操作技术(OT)功能的工业软件解决方案。该软件主要应用于制造业领域,其核心价值在于帮助工厂管理者实现对生产线性能的实时监控和分析...

    DXperience 9.3.1 简繁体汉化,本地化,Skins(包含webform,winform,wpf,Silverlight) 使用见说明

    6. **使用说明**:通过阅读`Readme-说明.htm`和各语言版本的`readme`文件,开发者可以了解如何在各自的开发环境中集成和使用DXperience 9.3.1,包括汉化和Skins的配置方法,以及可能出现的问题和解决方案。...

    文件下载-系统工具-屡获殊荣的专业本地化工具 SDL Passolo 2018 .zip

    SDL Passolo 2018 是一款备受赞誉的专业本地化工具,主要用于软件、文档和技术内容的翻译和国际化。它提供了一整套强大的功能,帮助语言专家和本地化专业人员高效地处理各种类型的本地化任务。 在本地化领域,SDL ...

    用SERVLET过滤器简化中文的输入和输出

    为了解决这一问题,文章提出了一种利用SERVLET过滤器简化中文输入输出的方法,并讨论了该方法在软件国际化的应用。 #### SERVLET过滤器的工作原理及应用 SERVLET过滤器(SERVLETFILTER)是SERVLET 2.3规范中引入的...

    深入剖析JSP和Servlet对中文的处理

    #### 四、乱码问题的根源及解决方案 1. **乱码问题的根源**: - 当从一种编码格式转换到另一种编码格式时,如果目标编码格式中不存在相应的字符,就会出现乱码。例如,从GB2312编码转换到ISO8859-1编码时,由于后...

Global site tag (gtag.js) - Google Analytics