[英]Why does java.lang.process's readline() behave differently for reading inputstream on different boxes with the same os
[英]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.