日期:2014-05-20  浏览次数:20863 次

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上没有中文包?