#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
проба
Похожие проекты: