为什么我的文本规范化在不同环境中表现不同?
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
系统属性的值。)
我正在使用以下方法/取自 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
系统属性的值。)