Как сохранить и восстановить строку с акцентами в Redis? - PullRequest
4 голосов
/ 22 января 2012

Мне не удается установить и получить строку с ударением в моей базе данных redis.
Символы с акцентами закодированы, как я могу получить их обратно, когда они установлены?

redis> set test téléphone
OK
redis> get test
"t\xc3\xa9l\xc3\xa9phone"

Я знаю, что это уже спрашивали (/5453987/aktsenty-hranyaschiesya-v-redis-ne-chitaytsya) но подробного ответа нет.

1 Ответ

19 голосов
/ 22 января 2012

Сервер Redis сам хранит все данные в виде двоичных объектов, поэтому он не зависит от кодировки.Сервер будет просто хранить то, что отправлено клиентом (включая символы UTF-8).

Вот несколько экспериментов:

$ echo téléphone | hexdump -C
00000000  74 c3 a9 6c c3 a9 70 68  6f 6e 65 0a              |t..l..phone.|

c3a9 - представление символа 'é'.

$ redis-cli
> set t téléphone
OK
> get t
"t\xc3\xa9l\xc3\xa9phone"

На самом деле данные правильно хранятся на сервере Redis.Однако, когда он запускается в терминале, клиент Redis интерпретирует выходные данные и применяет функцию sdscatrepr для преобразования непечатаемых символов (определение которых зависит от локали и в любом случае может быть нарушено для многобайтовых символов).

Простой обходной путь - запустить Redis-Cli с опцией 'raw':

$ redis-cli --raw
> get t
téléphone

Ваше собственное приложение, вероятно, будет использовать одну из клиентских библиотек, а не Redis-Cli, поэтому оно должноне будет проблемой на практике.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...