如何在redis HMSET中保存非Ascii字符?

问题描述 投票:0回答:2

我想将像

سلام
这样的阿拉伯字符保存在 Redis 哈希中,如下所示:

HMSET arabicHash "سلام" 5
OK

但是结果并不如预期:

127.0.0.1:6379> HGETALL arabicHash
1) "\xd8\xb3\xd9\x84\xd8\xa7\xd9\x85"
2) "5"

我想知道是否有办法直接将

سلام
保存到redis set中?如果没有,我如何在检索后将
"\xd8\xb3\xd9\x84\xd8\xa7\xd9\x85"
转换回人类可读的字符?

更新:我已经在我的 Ubuntu Bash 终端上进行了测试,但结果在这里格式不正确。截图:

enter image description here

unicode utf-8 redis
2个回答
2
投票
  1. 您需要用引号将存储在哈希中的键和值括起来。

enter image description here

在 try.redis.io 上测试(它以 utf-8 解码形式显示 redis 输出)

  1. 文本可能在 Redis 响应中显示为 utf-8 编码,但在解码时,它将正确显示为阿拉伯字符

0
投票

请注意,

redis-cli
默认显示字节编码字符(人类无法阅读),但有一个
--raw
开关用于以解码为字符串的格式显示它们,即以人类可读的形式(作为Redis开发人员)他自己回答这里):

$ redis-cli --raw -a $REDIS_PASSWORD

127.0.0.1:6379> HMSET test.hash 123 gęś 
OK

127.0.0.1:6379> HGETALL test.hash
123
gęś

...与默认值相比:

$ redis-cli -a $REDIS_PASSWORD

127.0.0.1:6379> HMSET test.hash 321 gęś 
OK

127.0.0.1:6379> hgetall test.hash
1) "123"
2) "g\xc4\x99\xc5\x9b"
3) "321"
4) "g\xc4\x99\xc5\x9b"

© www.soinside.com 2019 - 2024. All rights reserved.