2009-08-12 42 views
1

這個問題包含java和ruby。 我有一個Java程序,我從ruby撥打電話。爲什麼我的unicode不能在乘客下工作?

此代碼在Merb中完美工作,無需任何修改。

通過設置$ KCODE =「UTF8」,此代碼將在irb下完美工作。

對於我的生活,我無法得到它在phusion乘客下工作 - 這是一個問題,因爲我們的生產服務器是在乘客下,但我大部分時間都用在雜交機上或我的開發機器上。

設置非常簡單。

這裏是java代碼: import java.io. ; import java.util。;

public class Simple { 

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

} 

現在這裏是Ruby代碼:

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

下時,乘客/ Merb的跑了,你應該能夠做一個Merb.logger.error(@blah),並得到完全相同的TESTDATA - - 就像我說的,如果你設置的KCODE這個工程下Merb的罰款和下IRB不錯,但它並沒有下客

UPDATE工作 - 簡化一切

回答

2

問題可能是Java子進程啓動的環境未正確配置。暴力方法是使用ENV哈希注入環境變量。舉個例子:

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

您可能還編寫Java程序的包裝,其建立正確的環境,並從那裏工作,或者修改,以強制UTF8,而不是閱讀環境的Java程序本身。

+0

err ...我欠你一把鑰匙 - nxt時間我在加拿大 – eyberg 2009-08-12 20:44:55

相關問題