这个问题包含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下工作正常但它在乘客下不起作用
更新 - 简化了所有内容
答案 0 :(得分:2)
问题可能是未正确配置启动java子进程的环境。蛮力方法是使用ENV哈希注入环境变量。举个例子:
ENV['LC_CTYPE'] = 'en_US.UTF-8'
您可能还必须为Java程序编写一个包装程序,该程序包建立正确的环境并从那里开始工作,或者可能对Java程序本身进行修改,强制使用UTF8而不是读取环境。