2009-08-12 8 views
1

Diese Frage enthält Java und Ruby. Ich habe ein Java-Programm, das ich aus Ruby aufrufen.Warum funktioniert mein Unicode nicht unter passsenger?

Dieser Code funktioniert perfekt ohne Modifikationen.

Dieser Code funktioniert perfekt unter irb durch Setzen von $ KCODE = "UTF8".

Für das Leben von mir kann ich es nicht unter der Passage arbeiten - das ist ein Problem, da unser Produktionsserver unter Passagier ist, aber ich die meiste Zeit mit Mongrel oder etwas auf meinem Gerät verbringen.

Das Setup ist extrem einfach.

Hier ist der Java-Code: import java.io. ; importieren Sie java.util.;

public class Simple { 

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

} 

jetzt hier ist der Ruby-Code:

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

, wenn sie unter Passagier/merb lief sollten Sie eine Merb.logger.error (@blah) und erhalten exakt die gleichen Testdaten tun können - - wie ich schon sagte das funktioniert gut unter merb und fein unter irb, wenn Sie die KCODE gesetzt, aber es funktioniert unter Passagier nicht

UPDATE - vereinfacht alles

Antwort

2

Das Problem kann sein, dass die Umgebung, in die der Java-Subprozess gestartet wird, nicht korrekt konfiguriert ist. Ein Brute-Force-Ansatz besteht darin, Umgebungsvariablen mit dem ENV-Hash zu injizieren. Als Beispiel:

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

Sie können auch einen Wrapper für Ihr Java-Programm schreiben müssen, die die richtige Umgebung etabliert und arbeitet von dort aus, oder vielleicht eine Änderung des Java-Programm selbst, das UTF8 zwingt, anstatt die Umwelt des Lesens .

+0

err ... Ich schulde dir einen Schlüssel - nxt mal ich bin in Kanada – eyberg

Verwandte Themen