首页 > 解决方案 > 为什么编码在 Eclipse 中有效,但不在 Eclipse 之外?

问题描述

我有一个 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);
}

Document,FormatXMLOutputter是为jdom2库提供的。

如果 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 一样正确编码吗?

编辑:

  1. 添加了 Maven 资源插件。仍然无济于事:
<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>

标签: javaeclipsemaveniso-8859-1

解决方案


推荐阅读