2009-08-12 7 views
1

Cette question contient java et ruby. J'ai un programme java que j'appelle de chez ruby.Pourquoi mon Unicode ne fonctionne-t-il pas sous Passenger?

Ce code fonctionne sous Merb parfaitement sans aucune modification.

Ce code fonctionnera parfaitement sous irb en réglant $ KCODE = "UTF8". Pour la vie de moi, je ne peux pas le faire fonctionner sous un passager de phusion - c'est un problème car notre serveur de production est sous passager, mais je passe le plus clair de mon temps avec mongrel ou quelque chose sur ma machine dev.

La configuration est extrêmement simple.

Voici le code java: import java.io. ; import java.util.;

public class Simple { 

    public static void main(String[] args) throws Exception { 
     System.out.println("Ç"); 
    } 

} 

maintenant voici le code ruby:

IO.popen("java -cp \"/home/me/pass\" Simple") do |f| @blah = f.read end 

quand a couru sous passager/merb vous devriez être en mesure de faire un Merb.logger.error (@blah) et obtenir le même EXACT testdata - - comme je l'ai dit ceci fonctionne très bien sous merb et amende en vertu de RIR si vous définissez le KCODE mais il ne fonctionne pas sous passager

MISE À JOUR - tout simplifié

Répondre

2

Le problème peut être que l'environnement dans lequel le sous-processus Java est lancé n'est pas correctement configuré. Une approche par force brute consiste à injecter des variables d'environnement à l'aide du hachage ENV. A titre d'exemple:

ENV['LC_CTYPE'] = 'en_US.UTF-8' 

Vous pouvez également avoir à écrire un wrapper pour votre programme Java qui établit l'environnement correct et fonctionne à partir de là, ou peut-être une modification du programme Java lui-même qui oblige UTF8 au lieu de lire l'environnement .

+0

err ... Je vous dois une clé - temps nxt Je suis au Canada – eyberg

Questions connexes