Java多语言编码问题解析(2)

原创 2004年06月23日 11:38:00

这里是一个具体的例子:

现在因为浏览器对UTF-8的支持,我们可以通过在源文件、请求、响应中都使用unicode编码方式,来轻松达到处理国际化和字符编码问题的目标。
以我们使用的tomcat4.1.2为例,过程如下:

1、编写JSP页面时:在每个JSP页面在页首都要增加一行:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
在编辑JSP页面时,一定要确保JSP文件以unicode的方式保存,目前几乎所有的编辑器都有以unicode编码保存或将文件内容转换成unicode的功能。

2、增加一个用来声明request的CharacterEncoding的类SetCharacterEncodingFilter.java;
SetCharacterEncodingFilter的这个类主要的作用就是:把request在从页面刚提交到server端的时候的encoding声明为我们想要的encoding,通过调用request的方法setCharacterEncoding (String encoding) 来改变,这样可以使request的从客户端传过来的时候,按我们在web.xml (在第二点可以讲到) 中配置的encoding来对提交的数据编码。

3、修改web.xml文件,配置一个filter来过滤全部url请求,通过第二步中的类,声明所有url请求的编码类型未UTF-8。
在web.xml文件中加上以下这段:


  Set Character Encoding
  org.kyle.web.sample.SetCharacterEncodingFilter
                       
      encoding
      UTF-8
   


   Set Character Encoding
   /*


在上面这段文字中“org.kyle.web.sample.SetCharacterEncodingFilter”指定步骤2中的类的位置,“ UTF-8”指定我们希望声明的request的编码类型,“/*”指定这个filter的适用范围(这里指的是全部url请求)。

同时注意二个问题:
1:servlet的版本必需是支持request.setCharacterEncoding(String encoding)这个方法才行,也就是在serlvert2.3以上。
2:控制面板区域设置的当前代码页属性必需设定为"936 (GBK)",如果是"437(OEM-United States)"它处理文字的时候是8-bit,而中文和日文等是16-bit。所以在显示和处理时它把中文的前8位给截掉,这样就会出现乱码问题。

附:SetCharacterEncodingFilter源文件
package org.kyle.web.sample;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.UnavailableException;
public class SetCharacterEncodingFilter implements Filter
{
    /**
     * 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;

    /**
     * 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 filter
        chain.doFilter(request, response);
    }


    /**
     * Place this filter into service.
     *
     * @param filterConfig The filter configuration object
     *                   
     *encoding
     * UTF-8
     *
     */
    public void init(FilterConfig filterConfig) throws ServletException
    {
        this.filterConfig = filterConfig;
        this.encoding = filterConfig.getInitParameter("encoding");
        String value = filterConfig.getInitParameter("ignore");
        if (value == null)
            this.ignore = true;
        else if (value.equalsIgnoreCase("true"))
            this.ignore = true;
        else if (value.equalsIgnoreCase("yes"))
            this.ignore = true;
        else
            this.ignore = false;
    }

    /**
     * Select an appropriate character encoding to be used, based on the
     * characteristics of the current request and/or filter initialization
     * parameters.  If no character encoding should be set, return
     * null.
     *


     * The default implementation unconditionally returns the value configured
     * by the encoding initialization parameter for this
     * filter.
     *
     * @param request The servlet request we are processing
     */
    protected String selectEncoding(ServletRequest request)
    {
        return (this.encoding);
    }
}

Java多语言编码问题解析

1、Java编译器在对源文件编译前,会先把源文件转换为unicode编码,因为这个原因,我们在编译时一定要把源文件用的是什么编码方式正确无误的”告诉”编译器。  例如:我们的源文件是以UTF-8的方式...
  • studious_cat
  • studious_cat
  • 2011年03月05日 16:24
  • 421

Java多语言编码问题解析(1)

1、Java编译器在对源文件编译前,会先把源文件转换为unicode编码,因为这个原因,我们在编译时一定要把源文件用的是什么编码方式正确无误的”告诉”编译器。 例如:我们的源文件是以UTF-8的方式保...
  • enoeht
  • enoeht
  • 2004年06月23日 11:34
  • 848

JAVA基础:Java多语言编码问题解析

 1、Java编译器在对源文件编译前,会先把源文件转换为unicode编码,因为这个原因,我们在编译时一定要把源文件用的是什么编码方式正确无误的”告诉”编译器。  例如:我们的源文件是以UTF-8的方...
  • beyondqinghua
  • beyondqinghua
  • 2007年10月29日 18:32
  • 177

JAVA WEB上的多语言切换

因为在项目目前是验证demo阶段,所以功能能够支持的越多越好 so leader让我添加一个中英文切换功能 经过各种search后,初步实现了这个功能,下面把方法告诉给大家,仅供参考,如果有更好的方案...
  • wuhawang
  • wuhawang
  • 2016年08月17日 10:33
  • 7026

iOS 生成国际化包 APP支持多语言配置

如果你的App需要支持多国语言。那么,就应该为你的App应用添加“国际化”支持。 “国际化”乍看很高深。其实,苹果xCode都为我们设置好了,我们只需要简单的配置,就能够完成。 “国际化”顾名思义...
  • ZhengYanFeng1989
  • ZhengYanFeng1989
  • 2017年05月23日 10:24
  • 332

Java Web的Struts2的多语种网站的多语言切换实例

先看图图; 一      首先下载Properties Editor插件,该插件是支持中文的资源文件编辑器;MyEclipse 10.6 以上不用安装该插件...
  • bcbobo21cn
  • bcbobo21cn
  • 2015年05月28日 11:22
  • 1702

java实现多语言配置i18n

1、创建资源包和资源文件 一个资源包中的每个资源文件都必须拥有共同的基名。除了基名,每个资源文件的名称中还必须有标识其本地信息的附加部分。例如:一个资源包的基名是“inspectionJsonMsg...
  • baidu_20608025
  • baidu_20608025
  • 2018年01月20日 11:30
  • 24

Java实现多语言切换

在一个项目中涉及到中英文版本,一般在登录页或者首页的时候会有中英文连接 这个连接可以这样写: 前台读取多语言: 其中 标签是struts自带的可以获...
  • haqer0825
  • haqer0825
  • 2012年11月19日 10:12
  • 8062

解决URL二次编码的问题

想来想去  终于想到一个解决办法 urlString = [urlString stringByReplacingPercentEscapesUsingEncoding:NSUTF8St...
  • chenyong05314
  • chenyong05314
  • 2015年08月27日 11:53
  • 932

ZendFramework2学习笔记 国际化、多语言

为zf2项目配置指定国家的语言。
  • liuyangwuhan1980
  • liuyangwuhan1980
  • 2014年11月24日 13:32
  • 1351
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java多语言编码问题解析(2)
举报原因:
原因补充:

(最多只允许输入30个字)