我的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个字节)并且如何更改此
提前致谢,
罗纳德
答案 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>