为什么我的文本规范化在不同环境中表现不同?

Why does my text normalization behave differently in different environments?

我正在使用以下方法/取自 this answer

的代码规范化一些重音文本

去除口音:

String accented = "árvíztűrő tükörfúrógép";
String normalized = Normalizer.normalize(accented,  Normalizer.Form.NFD);
normalized = normalized.replaceAll("[^\p{ASCII}]", "");
System.out.println(normalized);

当我 运行 使用 IntelliJ(作为单元测试的一部分)时,这给出了预期的结果:

arvizturo tukorfurogep

如果我从命令行运行这个(通过gradle),我得到:

ArvAztArA tAkArfArAgA

在这两种情况下,我都使用同一台电脑 Java 1.8.0_151

来自build.gradle的相关部分:

apply plugin: 'java'
apply plugin: 'idea'
sourceCompatibility = 1.8
targetCompatibility = 1.8
dependencies {
  testCompile group: 'junit', name: 'junit', version: '4.12'
}

是什么导致了这种不同的行为?我如何确保在任何地方都能获得预期的结果?

感谢@eckes 和其他人的编译时建议。通过在编译时指定编码,我能够得到想要的结果。

我添加到 build.gradle 的设置是:

compileTestJava.options.encoding = 'UTF-8'

此选项仅影响测试 类(这是我的问题所在)。您还可以使用:

compileJava.options.encoding = 'UTF-8'

如果您的生产代码中有文本需要编码。

我遇到的另一种解决方案是:

tasks.withType(JavaCompile) {
  options.encoding = 'UTF-8'
}

(有趣的是,上述解决方案中的none改变了file.encoding系统属性的值。)