【问题标题】:Can I read Cyrillic (Russian) characters from the CLI in Groovy?我可以从 Groovy 的 CLI 中读取西里尔文(俄语)字符吗?
【发布时间】:2013-03-14 14:32:27
【问题描述】:

我有一个从 CLI 获取用户输入的 Groovy 脚本。 CLI 支持西里尔字符,并且编码和字符集都是 UTF-8。然而,当 Groovy 读取带有西里尔字符的输入时,它看到的只是“???????”。此外,Groovy 无法使用给定参数创建目录或文件。有人对强迫 Groovy 接受西里尔字符有任何想法吗?谢谢。

【问题讨论】:

    标签: encoding groovy command-line-interface


    【解决方案1】:

    确保您使用的阅读器使用与您的 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(); } 它仍在输出??????当给予西里尔字母时。我更关心正确创建目录而不是输出正确的文本。
    • 什么操作系统? java可能对文件名使用另一种编码。尝试将-Dfile.encoding=UTF-8 添加到命令行。
    • 这是在 Windows 上。我的编码在系统属性中使用JAVA_TOOL_OPTS=-Dfile.encoding=UTF-8 设置为 UTF-8
    • +1,这个问题前段时间在这里发过,问题是op的CLI中的编码问题。
    • 脚本没有输出正确的代码点。它为英文字符输出正确的代码点,但在西里尔字符上它打印 ?: 63 对于它的价值,在脚本的开头,我有 println "Encoding is " + System.properties['file.encoding'] println "charet is " + java.nio.charset.Charset.defaultCharset() 为两个语句输出 UTF-8
    猜你喜欢
    • 2015-10-14
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多