gpt4 book ai didi

java - 从 UTF-16LE 编码文件中删除非法 xml 字符

转载 作者:行者123 更新时间:2023-11-30 06:25:07 27 4
gpt4 key购买 nike

我有一个java应用程序,它解析以utf-16le编码的xml文件。由于非法 xml 字符,解析 xml 时出错。我的解决方案是将此文件读入java字符串,然后删除xml字符,这样就可以成功解析。它的工作效率为 99%,但此过程的输入输出存在一些细微的差异,不是由于删除了非法字符造成的,而是从 utf-16le 编码到 java 字符串 utf-16 引起的。我认为

BufferedReader reader = null;
String fileText = ""; //stored as UTF-16
try {
reader = new BufferedReader(new InputStreamReader(in, "UTF-16LE"));
for (String line; (line = reader.readLine()) != null; ) {
fileText += line;
}
} catch (Exception ex) {
logger.log(Level.WARNING, "Error removing illegal xml characters", ex);
} finally {
if (reader != null) {
reader.close();
}
}

//code to remove illegal chars from string here, irrelevant to problem

ByteArrayInputStream inStream = new ByteArrayInputStream(fileText.getBytes("UTF-16LE"));
Document doc = XmlUtil.openDocument(inStream, XML_ROOT_NODE_ELEM);

从 UTF-16LE 转换为 UTF-16 时字符是否会更改/丢失?有没有办法在java中做到这一点并确保输入与输出完全相同?

最佳答案

当然有一个问题是 readLine 会丢弃行结尾。

您需要执行以下操作:

       fileText += line + "\r\n";

否则,XML 属性、DTD 实体或其他内容可能会在至少需要一个空格的地方粘合在一起。此外,您不希望文本内容在包含换行符时被更改。

可以使用以下方法提高性能(速度和内存)

StringBuilder fileText = new StringBuilder();
... fileText.append(line).append("\n");
... fileText.toString();

那么文件的第一个字符可能有问题,有时会多余地添加:BOM 字符。

line = line.replace("\uFEFF", "");

关于java - 从 UTF-16LE 编码文件中删除非法 xml 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47332281/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com