【问题标题】:JAVA Maven false displaying of resources text files (like stressed letters) while execution without eclipseJAVA Maven在没有eclipse的情况下错误显示资源文本文件(如重音字母)
【发布时间】:2014-03-17 02:05:18
【问题描述】:

我正在开发的操作系统是 Windows 8。

我正在使用 JAVA 开发一个 Maven 项目。

说法语的人和说英语的人都可以使用最终程序。

我正在寻找一种解决方案,以便在没有 Eclipse 的情况下启动我的程序时显示以 UTF-8 编码并写入资源文件的小文本。

  • 使用 Eclipse,当我将主类作为 java 应用程序运行而不制作可执行的 jar 文件时,从资源文件加载的文本的重读字母(如 é、è)会正确显示。
  • 当我启动我的程序时,这是一个可执行的 jar 文件,由 maven 制作,没有 Eclipse,从资源文件加载的文本的重音字母(如 é、è)无法正确显示。

是不是因为默认情况下在 Windows 上,文本文件是通过 ANSI 编码保存的(使用 notepad++ 时)?

这是我的一个 pom 文件的一些行:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
    <plugins>
        <plugin>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.6</version>
            <configuration>
                <encoding>UTF-8</encoding>
            </configuration>
            <!-- remaining code for maven-resources-plugin -->
         </plugin>
     </plugins>
</build>

由于我是一名法国开发人员,我不确定自己是否正确编写。
但为了提高我的英文写作,我尽量写得最好。

如需了解更多详情,请随时给我留言。

提前感谢大家。

【问题讨论】:

    标签: java eclipse maven utf-8 resources


    【解决方案1】:

    我的项目完全使用 UTF-8;也适用于 .java。

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.4.3</version>
                <configuration>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
    

    这看起来很像您的设置。 Notepad++ 将显示编码,在您的情况下,默认情况下可能是 Windows-1252。您可以在 eclipse 和 Notepad++ 中更改编码。

    可能在没有 BOM 的情况下进行转换,因为文件开头的那个字符仅适用于旧记事本。

    最后一点。不要使用 FileReader/FileWriter,因为它们使用默认编码。无论如何,您可能使用getResource

    new InputStreamReader(getClass().getResourceAsStream("/..."),
            StandardCharsets.UTF_8)
    

    【讨论】:

    • 感谢您的回答,缺少参数 StandardCharsets.UTF_8。我已通过调用适当的构造函数 InputStreamReader 并将参数 StandardCharsets.UTF_8 附加到此构造函数的调用来纠正我的错误:我希望我能帮助其他开发人员。
    • @cardman 所以你的问题不完整:它缺少重现问题的关键方面。请编辑您的问题并添加您最初尝试加载资源的方式。
    • @oberlis 我的问题更准确吗?
    【解决方案2】:

    可以使用以下属性定义编码:

    <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    

    但是如果你已经定义了上述属性,那么插件中的编码定义是多余的,这意味着你的插件部分可以看起来像这样:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.6</version>
        </plugin>
    

    所有插件的默认值为encoding

    【讨论】:

    • 感谢您的回答,我还使用了变量“project.build.sourceEncoding”而不是硬编码字符串“UTF-8”,以便为我的 pom 文件使用通用代码。我希望我能帮助其他开发者。
    猜你喜欢
    • 2014-12-23
    • 2022-01-18
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多