环境:Ubuntu12.04,Open JDK7u3(java1.7.0_03)完全相同的程序和文件,在windows下面运行正常,到ubuntu下面运行异常:读取UTF-8文件,中文全部显示问号。可以保证文件编码确实是UTF-8,加BOM头和无BOM头都试过,一样的乱码。
代码里用juniversalchardet检测文件编码了,也检测是UTF-8。读取文本确实是用UTF-8读取的,代码如下:
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分都行。
代码里用juniversalchardet检测文件编码了,也检测是UTF-8。读取文本确实是用UTF-8读取的,代码如下:
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分都行。
[2012-08-09 23:16] [DEBUG] com.xmlswitch.parser.XmlParser.loadDocumentElement(XmlParser.java:45) Detected encoding of config dataconfig.xml: UTF-8
[2012-08-09 23:16] [DEBUG] com.xmlswitch.parser.XmlParser.loadDocumentElement(XmlParser.java:55) Reading file dataconfig.xml using UTF-8
[2012-08-09 23:16] [DEBUG] com.xmlswitch.parser.XmlParser.loadDocumentElement(XmlParser.java:77) Loaded config file:<?xml version="1.0" encoding="UTF-8"?>
<root>
<!-- ???????? Column?????? D???????? U????????? -->
每个问号其实是一个汉字。
如果这样,检查看你的log4j的输出编码log4j.appender.console.encoding=UTF-8灰色部门是自定义的
灰色部门是指 console
输出的时候有没有指定编码格式?
看看System.out.println(System.getProperty("file.encoding"));输出什么?
用下面的输出看看呢?
PrintWriter writerUTF = new PrintWriter(new OutputStreamWriter(
new FileOutputStream("UTF8.txt"), "UTF8"));
writerUTF.println("Write file using UTF8");
writerUTF.println();
writerUTF.println(configContent);
writerUTF.close();
1 你的控制台,也就是屏幕的编码不支持UTF-8, 也就是虽然程序处理和输出都是正确的,但你屏幕显示错了。
2 那个文件不是UTF-8, 你换个文件看看
直接log输出中文,是可以正常输出的,查看log文件中文正常,应该说明log配置没有问题。代码如下:
log.debug("这里是中文");TO fw0124:谢谢,
System.getProperty("file.encoding")输出为UTF-8。TO java2000_net:谢谢,
没有注意过控制台输出。log文件时乱码,带中文的SQL数据库查询无结果(正常来讲是可以查出数据的)。
那个文件一定是UTF-8的,使用编码工具查看过了,在windows下执行的时候读取正常,在代码里也用juniversalchardet检测了,都一致。补充:写UTF-8文件中文都是正常的,就是读取时不正常,每个中文都显示成一个问号。
Ubuntu 文本编辑器 检测文件的编码可能不包括 GB-18030、GB-2312 等常见中文编码安装 leafpad、KWrite 等支持自动检测中文编码的文本编辑器。
没在Ubuntu上打开过,生成的log文件都是通过ftp下载下来在windows上面打开看的。
我也觉得是1
lz把你生成的文件传到win上看看
还乱码不
我保证文件编码没错,绝对保证。
客户的系统是英文版。