Кириллица в redis

#go #redis #decode #cyrillic #redis-cli

#Вперед #redis #расшифровать #кириллица #redis-cli

Вопрос:

Используя redis-cli, я добавляю данные на кириллице в очередь redis, если использовать redis-cli для получения данных очереди, мы увидим "xafxe0xaexa1xa0" .

В GO

 msg, _ := redis.String(R.conn.Do("LPOP", key))
  

Результат

введите описание изображения здесь

Как я могу получить кириллицу? Я попробовал

 encoder := charmap.MacintoshCyrillic.NewDecoder() // Windows1251 to
s, _ := encoder.String(msg)
fmt.Print(s)
  

это не сработало

Комментарии:

1. Похоже, вы используете клиент Redigo. Redigo не преобразует и не конвертирует байты, отправленные на сервер Redis или с него.

2. "xafxe0xaexa1xa0" Строка соответствует русскому слову проба (тест, образец) в cp866 кодировке. Пробовал на python с помощью b"xafxe0xaexa1xa0".decode('cp866') .

3. @JosefZ спасибо go encoder := charmap.CodePage866.NewDecoder() s, _ := encoder.String(msg) , что это работает

4. @JosefZ Откуда ты знаешь, что это русский, одно и то же слово может быть сербским, белорусским, украинским … 😁

5.@Z.Kosanovic Это русский, однако я не претендую на исключительные права на… Например, Google translate определяет проба как болгарский… Извините…

Ответ №1:

Когда вы видите подобные символы мусора, проблема очень часто заключается в том, что данные (текст), закодированные в одном формате, декодируются как что-то другое.

Я использую chardetect (python), чтобы выяснить, как кодируются входные данные:

 echo -e "xafxe0xaexa1xa0" | tee /tmp/j | chardetect 
<stdin>: IBM866 with confidence 0.99
  

учардет тоже работает:

 $ uchardet /tmp/j
IBM866
  

Для правильного отображения слова:

 $ echo -e "xafxe0xaexa1xa0" | iconv -f IBM866 -t UTF-8
проба
  

Похожие проекты: