【问题标题】:UTF-8 Encoding Error when Running External Groovy Script from Grails从 Grails 运行外部 Groovy 脚本时出现 UTF-8 编码错误
【发布时间】:2010-12-13 23:57:07
【问题描述】:

我正在尝试从 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.checkName(Charset.java:284) 处 java.nio.charset.Charset.lookup2 处的“UTF-8”( Charset.java:458) 在 java.nio.charset.Charset.lookup(Charset.java:437) 在 java.nio.charset.Charset.defaultCharset(Charset.java:579) 在 sun.nio.cs.StreamEncoder.forOutputStreamWriter (StreamEncoder.java:37) 在 java.io.OutputStreamWriter.(OutputStreamWriter.java:94) 在 java.io.PrintStream.(PrintStream.java:100) 在 java.lang.System.initializeSystemClass(System.java:1092)

该脚本在 Grails 之外运行良好,我不确定编码问题来自何处。我尝试将 externalscript.groovy 保存为 UTF-8,但遇到了同样的问题。

【问题讨论】:

  • 您是否从 NetBeans IDE 运行此应用程序?否则你可以从 NetBeans IDE 运行它吗。NetBeans 最新版本支持 Grails 和 Groovy
  • 凯文,你需要接受一个答案。我会看看迈克尔的

标签: java grails groovy


【解决方案1】:

抛出异常是因为子 JVM 的平台默认编码不知何故最终成为 "UTF-8"包括引号,这不是合法的字符集名称。它与脚本本身无关,而与 Grails 生成子 JVM 的方式有关。

你有类似的东西

file.encoding="UTF-8" 

在您的 Grails 配置中的任何位置?或者设置file.encoding系统属性的代码?

【讨论】:

  • 谢谢你,迈克尔!这只是节省了我们在办公室的时间,试图找出 Glassfish 拒绝接受 UTF-8 的原因。 -Dfile.encoding="UTF-8" 在 shell 中工作(因为 shell 删除了引号),但在 GF 配置中没有。通过在外壳中设置 -Dfile.encoding=\"UTF-8\" 阅读您的答案后,我终于复制了错误。只需删除引号即可解决此问题。
【解决方案2】:

如果您将输出流更改为:

def outStream = new StringWriter(initialSize)
def errStream = new StringWriter(initialSize)

【讨论】:

    猜你喜欢
    • 2017-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 2014-05-14
    相关资源
    最近更新 更多