编程语言
首页 > 编程语言> > java-XMLStreamReader:获取字符偏移量:文件中的XML

java-XMLStreamReader:获取字符偏移量:文件中的XML

作者:互联网

XMLStreamReader-> Location具有称为getCharacterOffset()的方法.

不幸的是,Javadocs指出这是一个命名不明确的方法:它还可以返回一个字节偏移量(在实践中似乎是正确的).从文件读取时(例如),这似乎无济于事:

Javadoc状态:

Return the byte or character offset into the input source this
location is pointing to. If the input source is a file or a byte
stream then this is the byte offset into that stream, but if the input
source is a character media then the offset is the character offset. (emphasis added)

我真的需要字符偏移量;而且我很确定我会得到字节偏移量.

(UTF-8编码)XML包含在(部分损坏的1G)文件中. [因此需要使用一个较低级别的API,除非它确实别无选择,否则不要抱怨它缺乏格式正确性].

Javadoc说“ …输入源是字符介质…”时是什么意思:我如何强制其将输入文件视为“字符介质”,以便获得准确的(字符)偏移量而不是字节偏移量?

等等等等:

[我很确定这是怎么回事-当我将文件剥离(使用某些已知的高级标签)时,我丢失或丢失了几个字符-以一种不容忍的方式-我将区别最多可以删除几个多字节字符:同样,当我复制(例如在Powershell中使用“ head” /“ tail”)时,该工具似乎可以正确识别[或假定UTF-8]并可以很好地转换为据我所见,UTF-16

解决方法:

偏移量以基础Source为单位.

XMLStreamReader仅知道已从Source读取了多少个单位,因此以这些单位计算偏移量.

流以字节为单位工作,因此最终导致字节偏移.

Reader以char为单位工作,因此最终以char偏移.

StreamSource的文档在“字符媒体”一词的含义上更为明确.

也许尝试像

final Source source = new StreamSource(new InputStreamReader(new FileInputStream(new File("my.xml")), "UTF-8"));
final XMLStreamReader xmlReader = XMLInputFactory.newFactory().createXMLStreamReader(source);

标签:stax,java
来源: https://codeday.me/bug/20191031/1972433.html