1

この質問には Java と Ruby が含まれています。Rubyから呼び出すJavaプログラムがあります。

このコードは merb の下で、変更を加えることなく完全に機能します。

このコードは、$KCODE="UTF8" を設定することにより、irb で完全に機能します。

私の人生では、phusion パッセンジャーの下で動作させることはできません。これは、本番サーバーがパッセンジャーの下にあるため問題ですが、ほとんどの時間を開発マシンで雑種または何かに費やしています。

セットアップは非常に簡単です。

Java コードは次のとおりです。; 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

Passenger/merb の下で実行すると、Merb.logger.error(@blah) を実行して、まったく同じテストデータを取得できるはずです。これは、KCODE を設定した場合、merb では正常に動作し、irb では正常に動作すると言ったように、乗客の下では機能しません

更新-- すべてを簡素化

4

1 に答える 1

2

この問題は、Java サブプロセスが起動される環境が正しく構成されていない可能性があります。強引なアプローチは、ENV ハッシュを使用して環境変数を注入することです。例として:

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

また、正しい環境を確立してそこから動作する Java プログラムのラッパーを作成する必要がある場合や、環境を読み取る代わりに UTF8 を強制するように Java プログラム自体を変更する必要がある場合もあります。

于 2009-08-12T20:23:51.827 に答える