Ошибка кодирования UTF-8 при запуске внешнего скрипта Groovy из Grails - PullRequest
0 голосов
/ 14 декабря 2010

Я пытаюсь вызвать внешний скрипт Groovy из приложения Grails. У меня есть следующий код:

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()

Однако я получаю следующее исключение:

Произошла ошибка при инициализации виртуальной машины java.nio.charset.IllegalCharsetNameException: «UTF-8» в java.nio.charset.Charset.checkName (Charset.java:284) в java.nio.charset.Charset.lookup2 ( 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, но столкнулся с той же проблемой.

Ответы [ 2 ]

3 голосов
/ 14 декабря 2010

Исключение выдается, потому что кодировка по умолчанию для формы диска для дочерней JVM каким-то образом оказалась "UTF-8" , включая кавычки , что не является допустимым именем кодировки. Это не имеет ничего общего с самим сценарием, но с тем, как Grails порождает дочернюю JVM.

У вас есть что-то вроде

file.encoding="UTF-8" 

где-нибудь в вашей конфигурации Grails? Или код, который устанавливает системное свойство file.encoding?

0 голосов
/ 14 декабря 2010

Что если вы измените свои выходные потоки на:

def outStream = new StringWriter(initialSize)
def errStream = new StringWriter(initialSize)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...