2010-12-13 72 views
0

J'essaie d'appeler un script Groovy externe à partir d'une application Grails. J'ai le code suivant:Erreur de codage UTF-8 lors de l'exécution de script Groovy externe à partir de 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() 

Cependant, je reçois l'exception suivante:

Une erreur est survenue lors de l'initialisation de la machine virtuelle 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) at java.lang.System.initializeSystemClass (System.java:1092)

Le script fonctionne bien en dehors de Grails et je ne suis pas sûr d'où vient le problème d'encodage. J'ai essayé d'enregistrer l'externalscript.groovy comme UTF-8 mais je rencontre le même problème.

+0

exécutez-vous cette application à partir de NetBeans IDE? d'autre pouvez-vous l'exécuter froom NetBeans IDE.NetBeans support de la dernière version Grails et Groovy – UVM

+0

Kevin, vous devez accepter une réponse. Je regarderais Michael – oligofren

Répondre

0

si vous changez vos flux de sortie à:

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

L'exception est levée parce que l'encodage par défaut de plateform pour l'enfant JVM en quelque sorte fini par être "UTF-8"y compris les guillemets, ce qui est non juridique nom du jeu de caractères. Cela n'a rien à voir avec le script lui-même, mais avec la manière dont Grails engendre la JVM enfant.

Avez-vous quelque chose comme

file.encoding="UTF-8" 

partout dans votre configuration Grails? Ou code qui définit la propriété système file.encoding?

+0

MERCI, Michael! Cela a juste sauvé notre journée au bureau, essayant de comprendre pourquoi Glassfish a refusé d'accepter UTF-8. -Dfile.encoding = "UTF-8" travaillé dans le shell (puisque le shell supprime les guillemets), mais pas dans la config GF. J'ai finalement répliqué l'erreur après avoir lu votre réponse en mettant -Dfile.encoding = \ "UTF-8 \" dans le shell. Simplement enlever les citations a résolu le cas. – oligofren