Почему кодирование работает в Eclipse, а не вне Eclipse? - PullRequest
0 голосов
/ 13 мая 2019

У меня есть приложение Java, которое читает XML-файл, который может иметь акценты, и должен создать 2 подписанных XML-файла, которые должны иметь одинаковый кодированный акцент.

Код, который записывает XML в выходные файлы, выглядит следующим образом:

PrintStream ps1=new PrintStream(fileoutputstream1, true, "ISO-8859-1");
String strdoc=new String(enviodocumentostributarios.getDocument());

ps1.print(strdoc);
ps1.close();

Метод getDocument возвращает байтовый массив, полученный из ByteArrayOutputStream, обновленного следующим методом:

public static void getNiceXML(Document doc, OutputStream out, boolean encoding) {
    Format f = Format.getPrettyFormat(); 
    if(encoding)
        f.setEncoding("ISO-8859-1");
    f.setExpandEmptyElements(true);
    f.setLineSeparator("\r\n");
    f.setIndent("\t");
    f.setTextMode(TextMode.NORMALIZE);
    XMLOutputter dout = new XMLOutputter(f);

    dout.output(doc, out);
}

Для библиотеки jdom2 предусмотрены классы Document, Format и XMLOutputter.

Если входной файл XML имеет что-то вроде этого: <NmbItem>Pañuelo AFECTO</NmbItem>, когда я выполняю свою программу из Eclipse, выходные файлы кодируются правильно. Однако, если я выполняю свою программу из командной строки, выходные файлы имеют <NmbItem>Pañuelo AFECTO</NmbItem> вместо <NmbItem>Pañuelo AFECTO</NmbItem>. Я пытался даже перекодировать содержимое XML перед записью его в файлы, но безрезультатно.

Вот pom.xml для моей программы:

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cl.maraneda</groupId>
    <artifactId>dtesign</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>dtesign</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
    </properties>

    <repositories>
        <repository>
            <id>jabylon</id>
            <name>jabylon</name>
            <url>http://www.jabylon.org/maven/</url>
        </repository>
    </repositories>

    <dependencies>
        <dependency>
            <groupId>xml-security</groupId>
            <artifactId>xmlsec</artifactId>
            <version>1.3.0</version>
        </dependency>
        <dependency>
            <groupId>org.jdom</groupId>
            <artifactId>jdom</artifactId>
            <version>2.0.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>httpclient</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>gnu.getopt</groupId>
            <artifactId>java-getopt</artifactId>
            <version>1.0.13</version>
        </dependency>   
    </dependencies>

    <build>
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

Я попробовал следующее с этим pom.xml безрезультатно:

  1. Измените значение <project.build.sourceEncoding> на ISO-8859-1
  2. Измените тег <properties> так, чтобы он выглядел следующим образом:
<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>ISO-8859-1</project.reporting.outputEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
</properties>

И добавить <maven-compiler-plugin>

<plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-compiler-plugin</artifactId>
       <version>3.7.0</version>
       <configuration>
           <source>1.7</source>
           <target>1.7</target>
           <encoding>UTF-8</encoding>
       </configuration>
</plugin>

Что-то особенное, что я должен сделать, чтобы выходные файлы могли быть закодированы правильно, как в Eclipse?

EDIT:

  1. Добавлен плагин maven-resources-plugin. По-прежнему безрезультатно:
<plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-resources-plugin</artifactId>
     <version>3.1.0</version>
     <configuration>
        <encoding>ISO-8859-1</encoding>
     </configuration>
</plugin>
...