繁体   English   中英

为什么我的文本规范化在不同环境中的行为会有所不同?

[英]Why does my text normalization behave differently in different environments?

我正在使用以下方法/从此答案中获取的代码来规范一些重音文字

去除口音:

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

在这两种情况下,我都使用同一台PC和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'
}

(有趣的是,以上解决方案均未更改file.encoding系统属性的值。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM