Особенности кодировки при работе PHP & Ruby & Starling
В статье Ruby & PHP. Скрещиваем ужа с ежом с помощью Starling и Zend_Queue я рассказал, как организовать обмен данными между Ruby и PHP. В процессе работы возникла проблема передачи локализованных данных (на русском языке). Дальше я расскажу, как удалось её решить.
Задача
Starling работает по текстовому протоколу, информация в котором (команды и данные) кодируются в ASCII кодировке, а бинарный протокол не поддерживается. В очередь попадает массив, состоящий из текста в кодировке UTF-8, который в последствии сериализуется. Сообщение в таком виде в очередь передать уже нельзя (т.к. надо закодировать его в ASCII кодировке). Т.е. надо кодировать UTF’ые данные ASCII’шными кодами. В принципе получаем задачу свертки информации.
Решение
Для решения пробелмы можно использовать Base64-кодирование, функции работы с которыми есть и в PHP и в Ruby. Кодирование в PHP (функцией base64_encode() ):
1 2 |
$queuePool = new Zend_Queue(new ZendExtra_Queue_Adapter_Starling(array()), array('name' => 'my_queue')); $queuePool->send(array('data' => base64_encode('текст на русском'), 'action' => 'some_action')); |
Раскодирование в Ruby:
1 2 3 4 5 6 7 |
require 'starling' require 'base64' loop do begin job = starling.get_raw('my_queue') puts Base64.encode64(job['data']) end |
Про функцию get_raw вы можете прочитать здесь.
Что-то мне подсказывает, что это увеличит объемы передаваемой информации и неслабо повлияет на перфоманс. Ты делал замеры?
Да, увеличит.
Wiki
Однако мой канал поддерживает передачу только ASCII символов. Ты знаешь варианты лучше?
Тесты не делал, т.к. этот вариант кодирования показался мне оптимальным. Если будут другие – потестирую 🙂
Здравствуйте. Без меня кудато нажали кнопки и при включении компа и при работе постоянно выскакивает Windows Media Center. Половина ярлыков поменялись с эмблемками виндовс и когда включаешь, например скайп, появляется Windows Media Center, а скайп не включается. Также , например, браузер Хром – появляется опять Windows Media Center. Помогите, пожалуйства. Спасибо.
Добрый день! Проблемы скайпе обсуждаем в этом треде: https://tokarchuk.ru/2011/05/how-to-repair-skype/