Java ? UTF-16 xml文件中每行前面的符号。如何处理或保持现状?

Java ? UTF-16 xml文件中每行前面的符号。如何处理或保持现状?,java,encoding,xml-parsing,utf-16,byte-order-mark,Java,Encoding,Xml Parsing,Utf 16,Byte Order Mark,类似的问题,但对于UTF-发布在stackoverflow中 我的问题是:我需要从目标文件中删除BOM还是保留BOM(因为UTF-16需要它)。以下是情况简介(我已将上述问题中的详细信息作为第一部分答案发布): 两个XML文件,每个文件有两行,第一行是XML声明,第二行是所有其他标记或XML内容。(第二行是从整个XML文件创建的,第一行除外) 现在,我将几个这样的XML文件合并到一个文件中,源文件中的两行变成目标文件中的一行。目标文件有两行这样的单行线表示一个XML源文件 当我读取源文件并将它

类似的问题,但对于UTF-发布在stackoverflow中

我的问题是:我需要从目标文件中删除BOM还是保留BOM(因为UTF-16需要它)。以下是情况简介(我已将上述问题中的详细信息作为第一部分答案发布):

  • 两个XML文件,每个文件有两行,第一行是XML声明,第二行是所有其他标记或XML内容。(第二行是从整个XML文件创建的,第一行除外)
  • 现在,我将几个这样的XML文件合并到一个文件中,源文件中的两行变成目标文件中的一行。目标文件有两行这样的单行线表示一个XML源文件
  • 当我读取源文件并将它们写入目标文件时,我正在使用Java中的以下代码,并且我能够创建目标文件

    以下是用于阅读的Java代码:

    Reader reader = new InputStreamReader(new FileInputStream(fileName),
    Charset.forName("UTF-16"));
    BufferedReader br = new BufferedReader(reader);
    String line = br.readLine();
    StringBuffer lineBuffer= new StringBuffer();
    lineBuffer.append(line);
    lineBuffer.append("\r\n");
    
以下是用于编写的Java代码:

    Writer writer = new OutputStreamWriter(new FileOutputStream(
    targetFile ,true), "UTF-16");
    bw = new BufferedWriter(writer);
    bw.write(lineBuffer.toString());
  • 唯一的问题是,当我看到具有不同编辑器的目标文件时,会看到不同的行为:
  • 具有UTF-16支持的记事本++显示它非常好
  • Windows7记事本显示它没有任何特殊字符,但我可以看到目标文件有第二行,字体稍小
  • 不支持UTF-16的记事本++在第二行开头的<和后面的其他行的顶部显示一个点
  • 在另一个编辑上?符号出现在第二行开始的xml声明标记前面(第一行是文件)
源文件:

<?xml version="1.0" encoding="UTF-16"?>
<OtherTags></OtherTags>

目标文件:

<?xml version="1.0" encoding="UTF-16"?><OtherTags></OtherTags>
?<?xml version="1.0" encoding="UTF-16"?><OtherTags></OtherTags>
?<?xml version="1.0" encoding="UTF-16"?><OtherTags></OtherTags>

?
?

您的目标文件绝不是XMLYes,它是许多XML文件的组合。这是要求。