概述
平时我们在读取文件或写入文件时,都没有设置其编码,那么是不是每次都能读取到正确的文件内容(中文)?
最近做项目,发现本地和服务器间总是出现中文显示不一致的情况,比如服务器显示正常,但是本地却显示乱码。
最后就做了些测试:
首先基于eclipse,建了个测试项目
通过调用Charset.defaultCharset().name() 获取到当前编码为UTF-8,然后进行了写文件操作文件
String fileName = "G://abc.xml";
StringBuilder sb = new StringBuilder();
sb.append("<?xml version='1.0' encoding='utf-8'?>");
sb.append("<html>");
sb.append("<div id='did' name='你好'></div>");
sb.append("</html>");
String content = sb.toString();
FileOutputStream fos = new FileOutputStream(fileName);
fos.write(content.getBytes());//文件字符 utf-8
fos.close();
内容写入文件,打开文件中文正常,编码为utf-8,没有问题
此时在配置中把当前项目引用的jdk加上参数-Dfile.encoding=GBK,进行以上操作,文件编码编程gbk,
看样子在写文件时默认使用的编码与我们使用的jdk设置的编码直接又关系。
那么现在再做一件事,把刚content直接通过以下方法读取
Document doc = DocumentHelper.parseText(content);
System.out.println(doc.asXML());
出现了乱码,原来本地编译设置的是UTF-8,那么我们的代码包含字符串都是以utf-8的方式编码的,刚设置的bgk为系统默认的读取方式,修改如下:
Document doc = DocumentHelper.parseText(new String(content.getBytes("utf-8"),"gbk"));
System.out.println(doc.asXML());
这个时候就一切正常了。所以当前代码编译编码和文件默认读取编码是不相关的。
最后再做一件事:
SAXReader saxReader = new SAXReader();
//根据xml头<?xml version='1.0' encoding='utf-8'?>对应的编码读取xml文件,读取后为utf-8(编译环境编码)
//在console上显示的
Document sdoc = saxReader.read(new File(fileName));
System.out.println("sdoc : n"+new String(sdoc.asXML().getBytes("utf-8"),"gbk"));
如果没有做任何处理,刚content内容的第一段encoding='utf-8'如果和默认编码不一致直接报错,修改为gbk就正常,此时文件的编码也是gbk,读取到的文件内容是正常的,但是由于系统是utf-8编码,所有转换以utf-8编码装好成字节在以gbk就正常了。
网上查了下 关于xml文件读取,首先是根据xml检查隐含bom,其次是头encoding,最后是文件编码方式对文件读取。
总结:在编写代码时,我们都会设置编译时的编码,实际处理时又会有gbk的环境,可能这两点设置不一致,那么之后可能存在很多乱码问题,所有最好统一;其次关于xml文件的读取,首先检查文件隐含信息,其次才是头编码,最后如果上面两个都没有就是根据文件编码读取。
一个问题,在eclipse maven项目中,比如添加了maven-compiler-plugin插件,设置编码gbk,Charset.defaultCharset().name()对应gbk,但是这个时候修改了eclipse的jdk编码为utf-8,这个值就变成utf-8,很是奇怪,看样子maven编译插件是跟着eclipse的jdk走的。
最后
以上就是鲜艳海燕为你收集整理的关于eclipse中编码问题的全部内容,希望文章能够帮你解决关于eclipse中编码问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复