2009-08-12 4 views
1

Этот вопрос содержит java и ruby. У меня есть Java-программа, с которой я звоню из ruby.Почему мой юникод не работает под passsenger?

Этот код работает в режиме merb без каких-либо изменений.

Этот код будет работать с irb отлично, установив $ KCODE = "UTF8".

Для жизни я не могу заставить его работать под пассивным пассажиром - это проблема, так как наш производственный сервер находится под пассажиром, но большую часть времени я провожу с монгрелем или чем-то на моей машине-разработчике.

Установка очень проста.

Введите код 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) и получить точно такой же Testdata - - как я сказал, что это прекрасно работает под Merb и отлично под IRB, если вы установите KCODE, но он не работает под пассажиром

UPDATE - упрощено все

ответ

2

Проблема может заключаться в неправильной настройке среды, в которой запущен подпроцесс java. Подход с грубой силой заключается в том, чтобы вводить переменные среды, используя хеширование ENV. В качестве примера:

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

Вы можете также написать оболочку для вашей программы Java, которая устанавливает правильную среду и работает оттуда, или, возможно, модификацию самой программы Java, которая заставляет UTF8 вместо чтения среды ,

+0

err ... Я должен вам ключ - nxt time Я в Канаде – eyberg

Смежные вопросы