public class Language {
  ResourceBundle resource;
  private Event event;
  
  private Language()
  {
    this.event=new Event();
  }
  
  public Language()
  {
    this.resource=ResourceBundle.getBundle("zh_CN");
    this.event=new Event();
  }  public String getLocaleString(String field)
  {
    String value=new String();
    try
    {
      value=new String(resource.getString(field).getBytes("GBK"),"UTF-8");
    }
    catch(Exception e)
    {
      event.write(e.getMessage()+" key:"+field);
    }
    
    return value;
  }
}
zh_CN.properties文件编码为ASCII.已用native2ascii将该文件转为UNICODE内容用UTF-8浏览页面,发现调用 getLocaleString(String field)得到的字符串出现部分字符为乱码,一部分正常,这是什么原因啊?如果将上述
value=new String(resource.getString(field).getBytes("GBK"),"UTF-8");[/code]
中的转码过程去掉,改为
value=resource.getString(field);
用GBK方式浏览一切就正常。但我的目的是希望能在UTF8的编码方式浏览网页,达到正常显示汉字的效果。被这个问题困扰很久了,一直找不到解决方案。大家帮帮忙啊!小弟先谢了。

解决方案 »

  1.   

    获得资源文件的值时先不要转编码
    在servlet中设置下request.setCharacterEncoding("UTF-8");  或response.setCharacterEncoding("UTF-8");
    你试试
      

  2.   

    加入过了。 response.setContentType("text/html;charset=UTF-8");
    response.setCharacterEncoding("UTF-8");
    request.setCharacterEncoding("UTF-8");
      

  3.   

    是的,response的编码一直是这样设置的。在显示的页面中,UTF8格式的文本都可以正常显示,唯独从资源文件里面取出来的不能可以正常显示。
    当调整浏览器的编码为GBK以后就可以正常显示。但是其它UTF8格式的文本就不能正常显示了。
      

  4.   

    资源文件的编码我也改成了utf8格式,结果还是这样。
      

  5.   

    我用的是eclipse,项目编码都是utf8的
      

  6.   

    奇怪 按你上面的说法 页面改成GBK就不会乱码  那样的话好像说明你页面编码是GBK啊 
    JSP文件中的<%@ page language="java" contentType="text/html; pageEncoding="UTF-8"%>
      

  7.   

    页面编码是utf8,
    在该页面中,还从其它UTF8文件中调用了部分的文字。在UTF8编码浏览是正常的。
    从资源文件读出的字符在同样UTF8编码情况下不能正常显示。我于是把读出的字符转码,结果出现部分字符是乱码,问题等。如果不转码。在浏览的情况下,通过改变浏览器的编码为gbk从资源文件中读出的文字是正常的。从其它utf8文件中调用的文字却不能正常显示。
      

  8.   

    有一点可以确定的是从资源文件中读出的字符串编码是gbk。
    v是从资源文件中读取出来的字符串
    new String(v.getBytes("GBK"))
    返回的是正常显示的字符.
    new String(v.getBytes("GBK"),"UTF-8")
    返回的是大部分正常显示,个别乱码的字符.从资源文件中读出的字符串为什么是gbk的呢
      

  9.   

    GBK是系统平台的默认字符集,中文Windows XP平台上的是默认字符集
    是GB18030,与GBK是兼容的,Java在读取文件时是按平台的默认字符
    编码来读取的。
      

  10.   

    哦,bao110908这个问题该怎么处理呢?gbk to utf8 为什么会出现个别乱码?
      

  11.   

    我刚才测试了一下,问题可能在于资源源文件的编码格式。
    在转成abc_zh_CN.properties之前的temp.properties
    的编码格式要是GBK的,不能是UTF-8的,转码时只要采用:native2ascii temp.properties abc_zh_CN.properties 就可以了。另外,在读取资源时直接使用 resource.getString(field) 就行,不需要转码。还有,资源载入时,采用 ResourceBundle.getBundle("包名.abc"); 就可以了。你再试试看,我的测试是成功的。
      

  12.   

    我现在是照着你的意思重新做了一遍。发现resource.getString(field);得到的字符串还是GBK编码的。
    转为UTF-8之后还是显示的不正常,部分字符乱码。login.verifycode.caption=\u9644\u52a0\u7801这是用native2ascii转码后的结果resource.getString("login.verifycode.caption")返回的是'附加码',但是不能在UTF-8编码正常浏览。要把浏览器的编码设置为gbk,才能正常显示。所以我得把它转成UTF-8的。转完后在UTF8编码下可以显示。但是不正常:'附加�?'
      

  13.   

    补充程序运行环境:Windows2000 jdk 1.5.07 Tomcat5.0
      

  14.   

    原因已查出。ECLIPSE在编译类的时候,没有采用UTF-8编译导致无法正常显示。用手工指定编码后,一切正常显示。特别感谢applepop \bao110908.
      

  15.   

    这个问题是由于 文件本身的编码、文件内容编码导致的问题,
    只要文件本身的编码,文件内容编码、native2ascii的encoding=UTF-8
    可以避免这个问题,你的这个问题的原因是:编码的源文件文件本身编码不是UTF-8,所以导致了部分正确,部分乱吗的问题