当前位置: 代码迷 >> J2SE >> Ubuntu OpenJDK UTF-8资料读取中文乱码
  详细解决方案

Ubuntu OpenJDK UTF-8资料读取中文乱码

热度:5818   发布时间:2013-02-25 00:00:00.0
Ubuntu OpenJDK UTF-8文件读取中文乱码
环境:Ubuntu12.04,Open JDK7u3(java1.7.0_03)

完全相同的程序和文件,在windows下面运行正常,到ubuntu下面运行异常:读取UTF-8文件,中文全部显示问号。

可以保证文件编码确实是UTF-8,加BOM头和无BOM头都试过,一样的乱码。
代码里用juniversalchardet检测文件编码了,也检测是UTF-8。

读取文本确实是用UTF-8读取的,代码如下:
Java code
        String configContent;        InputStream fis = getClass().getClassLoader().getResourceAsStream(xmlFile);        try{            log.debug("Reading file " + xmlFile + " using " + charset);            InputStreamReader reader = new InputStreamReader(fis, charset);            try{                StringWriter writer = new StringWriter();                char[] buff = new char[1024];                int len;                while((len = reader.read(buff)) > 0){                    writer.write(buff, 0, len);                }                configContent = writer.toString();            }finally{                reader.close();            }        }finally{            fis.close();        }


谁能解决,再加200分都行。

------解决方案--------------------------------------------------------
顶一下又是乱码问题
------解决方案--------------------------------------------------------
其实这只是一个表面现象,你可以Debug看一下你读到的数据,可能就是中文,
如果这样,检查看你的log4j的输出编码

log4j.appender.console.encoding=UTF-8

灰色部门是自定义的
------解决方案--------------------------------------------------------
我猜测有2个原因
1 你的控制台,也就是屏幕的编码不支持UTF-8, 也就是虽然程序处理和输出都是正确的,但你屏幕显示错了。
2 那个文件不是UTF-8, 你换个文件看看
------解决方案--------------------------------------------------------
可能是Ubuntu 下文本编辑器打开中文的问题,程序生成的可能没有问题。
Ubuntu 文本编辑器 检测文件的编码可能不包括 GB-18030、GB-2312 等常见中文编码

安装 leafpad、KWrite 等支持自动检测中文编码的文本编辑器。
------解决方案--------------------------------------------------------
探讨

我猜测有2个原因
1 你的控制台,也就是屏幕的编码不支持UTF-8, 也就是虽然程序处理和输出都是正确的,但你屏幕显示错了。
2 那个文件不是UTF-8, 你换个文件看看

------解决方案--------------------------------------------------------
Ubuntu上没有中文包?