为什么我的unicode不能在乘客下工作?

时间:2009-08-12 19:50:22

标签: java ruby unicode passenger phusion

这个问题包含java和ruby。 我有一个java程序,我从ruby打电话。

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

通过设置$ KCODE =“UTF8”,此代码可以完美地工作。

对于我的生活,我不能让它在虚假乘客下工作 - 这是一个问题,因为我们的生产服务器是乘客,但我把大部分时间花在我的开发机器上的杂物或其他东西上。

设置非常简单。

这是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)并获得完全相同的测试数据 - 就像我说的这样在merb下工作正常,如果你设置了KCODE则在irb下工作正常但它在乘客下不起作用

更新 - 简化了所有内容

1 个答案:

答案 0 :(得分:2)

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

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

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