问:
´íÎó: Êý¾Ý²»ÄÜΪ¿Õ
在windows下可以正常显示,到linux就成了上面的乱码
bundle = ResourceBundle.getBundle(bundleName, locale,getCurrentLoader(bundleName)))) {
// see if we have a hit
try {
summary = bundle.getString(messageId);
if(locale!=null && Constant.SYSTEM_LANGUAGE.equals("zh")){
summary = new String(summary.getBytes("ISO8859_1"), "GBK");
// System.out.println("summary(ISO88591-GBK)="+summary);
};
}
catch (Exception e) {
}
}
有人遇上此问题吗
在windows下面以上代码可以正常运行,但到了linux就根本不运行
答:
给你个提示: 安装 linux 时,大都默认的是 utf-8 编码(这包括它的文件系统的编码等等) 你可以修改 /etc/sysconfig/i18n 文件来修改“语言、编码”
而我们常用的“简体中文 Windows”的内部编码是国标系列编码,如:gb2312、gbk、gb18030(但是其ntfs文件系统编码是unicode)
所以,当你采用原始的 .properties 文件(这里原始指的是:在简体中文 Windows 编辑的、未经过native2ascii.exe 转换编码的以国标系列编码存储的 .properties 资源文件)作为输入时,你在代码里必须进行从 iso-8859-1 到国标系列(gbXXXXX)的编码转换来读取,这在简体中文 Windows 下当然没问题,到了以utf-8为编码的 linux 环境下自然要出现乱码。
这种情况的乱码还会在类似“读取模版文件”(比如发送邮件模版)、简体中文的 FTP 用户端访问 utf-8 编码的 linux 上的 FTP 服务器列出文件名、在 utf-8 编码的 linux 压缩/打包文件然后在简体中文 Windows 解压缩文件后的文件名……等等的时候出现……
解决方案:
1、更改linux的编码方式 (/etc/sysconfig/i18n )。不推荐!这样一改,原先 linux 下以 utf-8 工作时产生的文件/文件名恐怕又要乱码了。。。
2、更改 .properties 文件存储的编码方式,改为以 utf-8 编码方式存储,相应的代码自然要改为 getBytes("iso-8859-1", "utf-8")...