1

这个问题包含java和ruby。我有一个从 ruby​​ 调用的 java 程序。

此代码在 merb 下完美运行,无需任何修改。

通过设置 $KCODE="UTF8",此代码将在 irb 下完美运行。

对于我的一生,我无法让它在 phusion 乘客下工作 - 这是一个问题,因为我们的生产服务器处于乘客之下,但我大部分时间都花在我的开发机器上的 mongrel 或其他东西上。

设置非常简单。

这是java代码:import java.io。; 导入 java.util。;

public class Simple {

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

}

现在这里是红宝石代码:

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

当在乘客/merb 下运行时,您应该能够执行 Merb.logger.error(@blah) 并获得完全相同的测试数据——就像我说的那样,如果您设置了 KCODE,这在 merb 下工作正常,在 irb 下工作正常,但确实如此不在乘客下工作

更新——简化一切

4

1 回答 1

2

问题可能是启动 java 子进程的环境配置不正确。蛮力方法是使用 ENV 哈希注入环境变量。举个例子:

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

您可能还必须为您的 Java 程序编写一个包装器,以建立正确的环境并从那里工作,或者可能对 Java 程序本身进行修改,强制使用 UTF8 而不是读取环境。

于 2009-08-12T20:23:51.827 回答