分享

XML文件编码GBK,GB2312

 爪一o_0一斗 2012-11-20

XML文件编码GBK,GB2312

      GB2312可以认为是GBK的子集,即GBK编码是在gb2312上扩展来的,GB18030是最全的中文编码。

           正好碰到一个GBK编码的xml,在用jdom读取的时候发现有一些字符变成乱码。用IE打开xml文件显示也都是完全正确的,后来发现问题的所在特此写出来以供大家借鉴吧~~

症状:XML文件中指定了字符集为gb2312(虽然后来证实应该是gbk的编码),使用ie可以正常打开无乱码,但是用jdom读取的时候有部分乱码产生。

解决办法:
因为只有一部分是乱码,所以猜测应该是字符集应该是gbk而不是gb2312,因此用下面两个办法都可以解决,让jdom使用gbk来读取文件。
1. 直接将xml文件里面指定字符集为gbk。这个没什么说的。

2. 如果在不修改xml的情况下,可以用下面的办法来解决。
一般情况下,我们都习惯用下面的方法来实例化一个Document对象
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(new File(filePath));
但是因为这样的话实际上输入到jdom中的stream还是由gb2312编码的,并不是gbk编码的,因此会导致得到的数据中有部分是乱码。

而在SAXBuilder.build()这个方法中,传入的参数类型可以File,或者InputStreamReader。File类型当中是没有办法指定编码的,但是InputStreamReader可以,因此可以用下面的办法获取Document对象。

假设文件路径为filePath

InputStreamReader isr = new InputStreamReader(new FileInputStream(filePath),"gbk");
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(isr);
这样的话Jdom就可以正常获取GBK编码的xml文件了。如果使用这个办法的话无论xml文件当中的encoding是如何进行指定的,jdom都会使用程序所指定的字符集来读取xml文件,自然也就不会乱码产生了。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多