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

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

Задача

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

Решение

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

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

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

Ссылки

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