【发布时间】:2013-03-14 14:32:27
【问题描述】:
我有一个从 CLI 获取用户输入的 Groovy 脚本。 CLI 支持西里尔字符,并且编码和字符集都是 UTF-8。然而,当 Groovy 读取带有西里尔字符的输入时,它看到的只是“???????”。此外,Groovy 无法使用给定参数创建目录或文件。有人对强迫 Groovy 接受西里尔字符有任何想法吗?谢谢。
【问题讨论】:
标签: encoding groovy command-line-interface
我有一个从 CLI 获取用户输入的 Groovy 脚本。 CLI 支持西里尔字符,并且编码和字符集都是 UTF-8。然而,当 Groovy 读取带有西里尔字符的输入时,它看到的只是“???????”。此外,Groovy 无法使用给定参数创建目录或文件。有人对强迫 Groovy 接受西里尔字符有任何想法吗?谢谢。
【问题讨论】:
标签: encoding groovy command-line-interface
确保您使用的阅读器使用与您的 CLI 相同的编码。如果是,则显示字符可能会出现问题。您可以像这样验证 groovy 得到的 Unicode 代码点:
// test.groovy
def input = System.in.withReader('UTF-8') { it.readLine() }
input.eachWithIndex { ch, index ->
println "$ch, ${Character.codePointAt(input, index)}"
}
从 CLI 运行它:
$ echo $LANG
en_US.UTF-8
$ echo Здра́вствуйте | groovy test.groovy
З, 1047
д, 1076
р, 1088
а, 1072
́, 769
в, 1074
с, 1089
т, 1090
в, 1074
у, 1091
й, 1081
т, 1090
е, 1077
【讨论】:
System.in.withReader("UTF-8") { println it.readLine(); } 它仍在输出??????当给予西里尔字母时。我更关心正确创建目录而不是输出正确的文本。
-Dfile.encoding=UTF-8 添加到命令行。
JAVA_TOOL_OPTS=-Dfile.encoding=UTF-8 设置为 UTF-8
?: 63 对于它的价值,在脚本的开头,我有 println "Encoding is " + System.properties['file.encoding'] println "charet is " + java.nio.charset.Charset.defaultCharset() 为两个语句输出 UTF-8