当前位置: 首页 > 知识库问答 >
问题:

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

齐英朗
2023-03-14
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中有没有一种方法可以做到这一点,并确保输入与输出完全相同?

共有1个答案

皮景龙
2023-03-14

当然,一个问题是readline丢弃了行尾。

您需要执行以下操作:

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

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

StringBuilder fileText = new StringBuilder();
... fileText.append(line).append("\n");
... fileText.toString();
line = line.replace("\uFEFF", "");
 类似资料:
  • 问题内容: 我必须用Java处理这种情况: 我从声明了encoding = utf-8的客户端收到XML格式的请求。不幸的是,它可能不包含utf-8字符,并且有必要从我这一边的xml中删除这些字符(旧式)。 让我们考虑一个示例,其中该无效XML包含£(磅)。 1)我将xml作为带有£的java字符串(我现在无法访问接口,但我很可能将xml作为java的字符串)。我可以使用replaceAll(£,

  • 问题内容: 我需要对UTF-16字节数组进行编码/解码。字节数组是通过字节顺序标记(BOM)给我的,我需要使用BOM编码字节数组。 另外,由于我正在与Microsoft客户端/服务器打交道,因此我希望以小字节序(与LE BOM一起)发出编码,以避免任何误解。我确实意识到,使用BOM可以在大端模式下工作,但是我不想在Windows世界中游走。 例如,以下是一种使用BOM 编码为little endi

  • 问题内容: 我有大量的文件和解析器。我要做的是剥离所有非utf-8符号并将数据放入mongodb中。目前,我有这样的代码。 不知何故我仍然出现错误 我不明白 有一些简单的方法吗? UPD :似乎Python和Mongo对Utf-8有效字符串的定义不同意。 问题答案: 请尝试在下面的代码行而不是最后两行。希望能帮助到你:

  • 问题内容: 我有一个带有BOM的UTF-8编码文件,并且想要删除BOM。是否有任何Linux命令行工具可从文件中删除BOM? 问题答案: BOM是Unicode代码点U + FEFF;UTF-8编码由三个十六进制值0xEF,0xBB,0xBF组成。 使用bash,您可以创建带有特殊引号形式的UTF-8 BOM,该形式实现Unicode转义:。因此,使用bash,从文本文件的开头删除UTF-8 BO

  • 有没有办法从一个巨大的xml文件中删除注释( 两者,根元素前的注释 和内的注释 最好的解决方案是使用xPath。我试过了 它适用于DOM,但不适用于vtd xml 这是我选择评论的代码 但此处的屏幕上打印的是nothing。 有没有办法用vtd xml做到这一点? 谢谢你的帮助。

  • 问题内容: 我在从字符串中删除非utf8字符时出现问题,这些字符无法正确显示。像这样的字符0x97 0x61 0x6C 0x6F(十六进制表示) 删除它们的最佳方法是什么?正则表达式还是其他? 问题答案: 使用正则表达式方法: 它搜索UTF-8序列,并将其捕获到组1中。它还与无法标识为UTF-8序列的一部分的单个字节匹配,但不捕获这些字节。替换是捕获到组1中的任何内容。这将有效删除所有无效字节。