maven file.encoding和Charset.defaultCharset()

时间:2013-06-28 11:29:31

标签: maven encoding

我的maven父POM包含

<file.encoding>UTF-8</file.encoding>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

我有一个JUnit-Test,它包含以下代码:

byte[] bytes;
System.out.println("------------------" + System.getProperty("file.encoding"));
try {
    bytes = "ü".getBytes(); // german umlaut u - two bytes in utf-8 one byte in latin-1
    System.out.println("Byte count: " + bytes.length);
    for (int i = 0; i < bytes.length; i++) {
        System.out.println(String.format("%02x", bytes[i]));
    }
} catch (Exception e) {
    e.printStackTrace();
}
System.out.println("------------------" + Charset.defaultCharset());

当我运行mvn clean test(在我的Windows机器上使用Cp1252的默认字符集)输出

------------------Cp1252
Byte count: 1
fc
------------------windows-1252

当我运行mvn -Dfile.encoding = UTF-8 clean test时输出为:

------------------UTF-8
Byte count: 1
fc
------------------windows-1252

现在我有两个问题:

1)什么是属性&lt; file.encoding&gt;在我的POM中有用吗?

2)当我指定-Dfile.encoding = UTF-8时,为什么默认字符集不是更改为UTF-8(因此getBytes()仍然使用'cp1252'并返回1个字节)并且如何更改此

提前致谢,

罗纳德

2 个答案:

答案 0 :(得分:0)

编辑器也必须设置相同的编码。显然你在Cp1252中保存了文件。使用JEdit或NotePad ++来检查它。

getBytes("UTF-8"); // 2
getBytes("Cp1252"); // 1
getBytes(); // Depending on platform, System.getProperty("file.encoding")

maven对这些属性做了什么,我不完全确定file.encoding

答案 1 :(得分:0)

如果要让Charset.defaultCharset返回UTF-8,则还需要为插件argLine设置它,因为如果仅在属性中指定,则为时已晚。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.19.1</version>
    <configuration>
      <skipTests>${skip.unit.tests}</skipTests>
      <enableAssertions>true</enableAssertions>
      <argLine>${surefireArgLine} -Dfile.encoding=UTF-8</argLine>
    </configuration>
  </plugin>