Особенности кодировки при работе PHP & Ruby & Starling

// Май 27th, 2011 // PHP, Ruby

В статье Ruby & PHP. Скрещиваем ужа с ежом с помощью Starling и Zend_Queue я рассказал, как организовать обмен данными между Ruby и PHP. В процессе работы возникла проблема передачи локализованных данных (на русском языке). Дальше я расскажу, как удалось её решить.

Задача

Starling работает по текстовому протоколу, информация в котором (команды и данные) кодируются в ASCII кодировке, а бинарный протокол не поддерживается. В очередь попадает массив, состоящий из текста в кодировке UTF-8, который в последствии сериализуется. Сообщение в таком виде в очередь передать уже нельзя (т.к. надо закодировать его в ASCII кодировке). Т.е. надо кодировать UTF’ые данные ASCII’шными кодами. В принципе получаем задачу свертки информации.

Решение

Для решения пробелмы можно использовать Base64-кодирование, функции работы с которыми есть и в PHP и в Ruby.  Кодирование в PHP (функцией base64_encode() ):

        $queuePool = new Zend_Queue(new ZendExtra_Queue_Adapter_Starling(array()), array('name' => 'my_queue'));
        $queuePool->send(array('data' => base64_encode('текст на русском'), 'action' => 'some_action'));

Раскодирование в Ruby:

require 'starling'
require 'base64'
loop do
 begin
   job = starling.get_raw('my_queue')
   puts Base64.encode64(job['data'])
end

Про функцию get_raw вы можете прочитать здесь.

Ссылки

Звёздные войны ASCII-видео

Share

Спасибо!


Если вам помогла статья, или вы хотите поддержать мои исследования и блог - вот лучший способ сделать это:


4 Responses to “Особенности кодировки при работе PHP & Ruby & Starling”

  1. ShimON:

    Что-то мне подсказывает, что это увеличит объемы передаваемой информации и неслабо повлияет на перфоманс. Ты делал замеры?

    • google.com Андрей Токарчук:

      Да, увеличит.

      Результирующие закодированные по base64 данные имеют длину, большую оригинальной в соотношении 4:3

      Wiki
      Однако мой канал поддерживает передачу только ASCII символов. Ты знаешь варианты лучше?
      Тесты не делал, т.к. этот вариант кодирования показался мне оптимальным. Если будут другие — потестирую :-)

  2. Anna:

    Здравствуйте. Без меня кудато нажали кнопки и при включении компа и при работе постоянно выскакивает Windows Media Center. Половина ярлыков поменялись с эмблемками виндовс и когда включаешь, например скайп, появляется Windows Media Center, а скайп не включается. Также , например, браузер Хром — появляется опять Windows Media Center. Помогите, пожалуйства. Спасибо.

Комментировать