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 等支持自动检测中文编码的文本编辑器。
------解决方案--------------------
------解决方案--------------------Ubuntu上没有中文包?