首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用JCabi Java读取UTF-16 XML文件

用JCabi Java读取UTF-16 XML文件
EN

Stack Overflow用户
提问于 2021-05-26 00:10:07
回答 1查看 110关注 0票数 2

我已经找到了这个JCabi代码片段,它可以很好地处理UTF-8XML编码文件,它基本上读取该xml文件,然后将其打印为一个字符串。

代码语言:javascript
复制
            XML xml;
            try {
                xml = new XMLDocument(new File("test8.xml"));
                String xmlString = xml.toString();
                System.out.println(xmlString);
            } catch (FileNotFoundException e1) {
                e1.printStackTrace();
            }

但是,为了在UTF-16编码的xml上运行相同的代码,我需要这样做,它给出了以下错误:

致命错误:1:1: prolog中不允许内容。线程“AWT 0”java.lang.IllegalArgumentException中的异常:无法解析,很可能是由:org.xml.sax.SAXParseException、lineNumber: 1、columnNumber: 1造成的,在prolog中不允许使用内容。

我读过关于这个错误的文章,这意味着解析器它没有识别prolog,因为它看到的字符因为编码而不应该在那里。

我尝试过其他库,它们提供了一种“告诉”编码源文件的类的方法,但是我能够在某种程度上让它工作的唯一库是JCabi,但是我无法找到一种方法来告诉它我的源文件是用UTF-16编码的。

谢谢,任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-26 02:21:24

jcabi XMLDocument有各种构造函数,包括一个接受字符串的构造函数。因此,一种方法是使用:

代码语言:javascript
复制
Path path = Paths.get("test16_LE_with_bom.xml");
XML xml = new XMLDocument(Files.readString(path, StandardCharsets.UTF_16LE));
String xmlString = xml.toString();
System.out.println(xmlString);

这利用了java.nio.charset.StandardCharsetsjava.nio.file.Files

在我的第一个测试中,我的XML文件被编码为UTF-16-LE (开头是一个BOM表FF FE表示小endian)。以上方法处理BOM OK。

我的测试文件的prolog如下(没有显式编码--也许这是一件坏事,在这里?):

代码语言:javascript
复制
<?xml version="1.0"?>

在我的第二个测试中,我删除了BOM,并使用更新的文件重新运行--这也有效。

我使用Notepad++和十六进制编辑器来验证/选择编码&编辑测试文件。

您的文件可能与我的测试文件不同(bevs.le)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67697036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档