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

发布于 2024-08-01 14:24:56 字数 739 浏览 9 评论 0原文

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

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

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

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

设置非常简单。

这是java代码: 导入 java.io.; 导入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

当在 guest/merb 下运行时,您应该能够执行 Merb.logger.error(@blah) 并获得完全相同的测试数据 - 就像我说的,这在 merb 下运行良好,在 irb 下运行良好,如果 下不起作用- 简化了一切

您设置了 KCODE,但它在乘客更新

This question contains java and ruby.
I have a java program that I make a call to from ruby.

This code works under merb perfectly without any modifications.

This code will work under irb perfectly by setting $KCODE="UTF8".

For the life of me I can not get it to work under phusion passenger -- this is a problem since our production server is under passenger but I spend most of my time with mongrel or something on my dev machine.

The setup is extremely simple.

Here is the java code:
import java.io.;
import java.util.
;

public class Simple {

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

}

now here is the ruby code:

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

when ran under passenger/merb you should be able to do a Merb.logger.error(@blah) and get the EXACT same testdata -- like I said this works fine under merb and fine under irb if you set the KCODE but it does not work under passenger

UPDATE -- simplified everything

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我也只是我 2024-08-08 14:24:56

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

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

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

The issue may be that the environment into which the java sub-process is launched is not correctly configured. A brute-force approach is to inject environment variables using the ENV hash. As an example:

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

You may also have to write a wrapper for your Java program that establishes the correct environment and works from there, or perhaps a modification to the Java program itself that forces UTF8 instead of reading the environment.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文