从Grails运行外部Groovy脚本时出现UTF-8编码错误

时间:2010-12-13 23:57:07

标签: java grails groovy

我正在尝试从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,但我遇到了同样的问题。

2 个答案:

答案 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)