Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> PHP-Java-кодировка 
V
    Опции темы
Majesty
Дата 20.7.2009, 07:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 20.3.2005
Где: Almaty, Kazakhsta n

Репутация: нет
Всего: нет



Задача - запустить из PHP-скрипта приложение на Java (запустить не отдельный класс, а приложение целиком). Параметром запуска передать приложению кириллическую строку.

Приложение для тестов:
Код
class test {
   public static void main(String[] args) {
      System.out.println("> "+args[0]);
   }
}
Из консоли (Ubuntu 9.04, но нужно кросс-платформенное решение, т.к. в будущем эта ерунда будет развёрнута под Windows Server 2008) запускается без проблем:
Код
#java test тест
> тест
Локаль ru_RU.UTF-8.

Пытаюсь запустить из РНР:
Код
    setlocale(LC_ALL, 'ru_RU.utf-8');
    exec('java test тест', $lines, $code);
    var_dump($lines);
    var_dump( $code );
Получаю на выходе 
Код
> 
для всех кодировок, кроме ISO-8859-1 (в ней выводится "> тест"). Что я делаю не так и как сделать "так"? smile
PM MAIL WWW   Вверх
lukas
Дата 20.7.2009, 08:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



а может просто попробовать:

Код

setlocale(LC_ALL, 'ru_RU');



--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
krundetz
Дата 20.7.2009, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 20
Всего: 69



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


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
Majesty
Дата 20.7.2009, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 20.3.2005
Где: Almaty, Kazakhsta n

Репутация: нет
Всего: нет



Без пхп (в консоли) передаю в UTF-8 и получаю в UTF-8. Когда в пхп делаю iconv('windows-1251', 'utf-8', $string) в Java приходит строка, в которой каждый символ представлен парой вопросов.
ru_RU попробую, потом отпишу.

Это сообщение отредактировал(а) Majesty - 20.7.2009, 10:26
PM MAIL WWW   Вверх
lukas
Дата 20.7.2009, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



Вот здесь сталкивались с похожей проблемой:

http://forum.dklab.ru/viewtopic.php?p=172529


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
krundetz
Дата 20.7.2009, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 20
Всего: 69



Цитата(Majesty @  20.7.2009,  10:25 Найти цитируемый пост)
Когда в пхп делаю iconv('windows-1251', 'utf-8', $string) в Java приходит строка, в которой каждый символ представлен парой вопросов.

так понимаю ты делаешь преобразование до отправки данных в java-приложение? пробовал ли ты делать преобразование после получения данных из приложения? в какой кодировке php файл?


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
Majesty
Дата 20.7.2009, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 20.3.2005
Где: Almaty, Kazakhsta n

Репутация: нет
Всего: нет



lukas, ткните носом в строку, не нашёл ничего даже отдалённо напоминающего мою проблему в той ветке.
krundetz, файл в 1251. попробую. проект дома, я на работе, а провайдер отключил интернет на профилактику smile так что отпишу только вечером...
PM MAIL WWW   Вверх
krundetz
Дата 20.7.2009, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 20
Всего: 69



Цитата(Majesty @  20.7.2009,  13:26 Найти цитируемый пост)
krundetz, файл в 1251.

тогда все правильно преобразуй данные из win1251 в utf8 перед передачей их в приложение, а потом(после получения данных из приложения) из utf8 в win1251 перед их выводом, тогда знаки вопроса должны пропасть
и тогда setlocale() не нужна.

Это сообщение отредактировал(а) krundetz - 20.7.2009, 14:32


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
youri
Дата 20.7.2009, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 17.4.2004

Репутация: 6
Всего: 16



setlocale не должна влиять
попробуй в java-программе вывести отладочную информацию в файл (количество аргументов и сами аргументы)
PM   Вверх
Majesty
Дата 20.7.2009, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 20.3.2005
Где: Almaty, Kazakhsta n

Репутация: нет
Всего: нет



krundetz, знаки вопросов пропали smile но вот строчка не появилась smile вопросы появлялись при локали utf-8 одновременно с конвертацией из 1251 в utf-8. что-нибудь одно убираешь - остаётся пустая строчка.
youri, вывожу на экран. указываю "1 тест 2", выводит "1   2" :( передается только в ascii :(

Добавлено через 9 минут и 54 секунды
Вопрос - как перевести строку в ISO-8859-1? Пробовал iconv'ом, но получается "????" вместо "тест". Если страница в iso-8859-1 и с неё отправляется форма, то данные приходят верные. Вот думаю уже, от безысходности, конвертировать данные перед отправкой... Только как?
PM MAIL WWW   Вверх
youri
Дата 20.7.2009, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 17.4.2004

Репутация: 6
Всего: 16



между 1 и 2 один пробел? Какие коды символов между 1 и 2? Приходит 3 аргумента?
PM   Вверх
krundetz
Дата 20.7.2009, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 20
Всего: 69



Цитата(Majesty @  20.7.2009,  18:02 Найти цитируемый пост)
krundetz, знаки вопросов пропали smile но вот строчка не появилась smile вопросы появлялись при локали utf-8 одновременно с конвертацией из 1251 в utf-8. что-нибудь одно убираешь - остаётся пустая строчка.

однако.

а ты пробовал менять кодировку в браузере, когда появлялись знаки вопроса? что отдает сервер в качестве кодировки для браузера?

попробуй явно кинуть кодировку для браузера
Код

header("Content-Type: text/html;charset=UTF-8");


просто знаки вопроса, появляються обычно когда кодировка UTF-8 а браузер ее пытаеться отобразить как другую

Это сообщение отредактировал(а) krundetz - 20.7.2009, 19:01


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
Majesty
Дата 20.7.2009, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 20.3.2005
Где: Almaty, Kazakhsta n

Репутация: нет
Всего: нет



youri, там два пробела (т.е. слово "тест" просто вырезано). приходит один аргумент, т.к. отправляю я один аргумент smile
krundetz, всё правильно работает, если в браузере указать iso-8859-1 и с формы на этой странице передать данные в джаву... при указании любой другой кодировки - либо вопросы (если пытаться iconv'ить из кириллической кодировки в iso-8859-1), либо пустая строка.
PM MAIL WWW   Вверх
Majesty
Дата 22.7.2009, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 20.3.2005
Где: Almaty, Kazakhsta n

Репутация: нет
Всего: нет



Решил пойти другим (более правильным) путём - переписал Java-приложение, чтобы оно слушало порт, принимало строку запроса и возвращало информацию. Через telnet всё работает (как локально, так и удалённо), в похапе зависает сокет (похапе висит, приложение показывает в логах, что приняло соединение и ждёт строку запроса). 
Код
if( $_REQUEST['phrase'] ) {
    $sp = strtolower($_REQUEST['phrase']);
    $search_phrase = "_fullstory:" . $sp;

    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    $result = socket_connect($socket, 'localhost', '4444');
    socket_write($socket, $search_phrase, strlen($search_phrase));
    while ($out = socket_read($socket, 2048)) {
        echo $out;
    }
}

PM MAIL WWW   Вверх
Majesty
Дата 22.7.2009, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 20.3.2005
Где: Almaty, Kazakhsta n

Репутация: нет
Всего: нет



На этот раз всё решилось переводом строки в ютф-8
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0539 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.