我正在尝试从Grails应用程序中调用外部Groovy脚本。我有以下代码:
def initialSize = 4096
def outStream = new ByteArrayOutputStream(initialSize)
def errStream = new ByteArrayOutputStream(initialSize)
def process ="groovy -cp src/groovy/ src/groovy/externalscript.groovy ".execute()
process.consumeProcessOutput(outStream, errStream)
process.waitFor()
println 'out:\n' + outStream
println 'err:\n' + errStream
println process.exitValue()
但是,我得到以下例外:
在初始化VM java.nio.charset.IllegalCharsetNameException期间发生错误:java.nio.charset.Charset.cheup上的java.nio.charset.Charset.checkName(Charset.java:284)中的“UTF-8”( Charset.java:458)at java.nio.charset.Charset.lookup(Charset.java:437)at java.nio.charset.Charset.defaultCharset(Charset.java:579)at sun.nio.cs.StreamEncoder.forOutputStreamWriter (StreamEncoder.java:37)java.io.OutputStreamWriter。(OutputStreamWriter.java:94)java.io.PrintStream。(PrintStream.java:100)at java.lang.System.initializeSystemClass(System.java:1092)
该脚本在Grails之外工作正常,我不确定编码问题的来源。我曾尝试将externalscript.groovy保存为UTF-8,但我遇到了同样的问题。
答案 0 :(得分:3)
抛出异常,因为子JVM的平台默认编码不知何故最终成为"UTF-8"
,包括引号,这不是合法的字符集名称。它与脚本本身无关,但与Grails生成子JVM的方式有关。
你有类似
的东西吗?file.encoding="UTF-8"
Grails配置中的任何位置?或者设置file.encoding
系统属性的代码?
答案 1 :(得分:0)
如果您将输出流更改为:
,该怎么办?def outStream = new StringWriter(initialSize)
def errStream = new StringWriter(initialSize)