redis - 如何在 Redis 中保存和检索带有重音符号的字符串?

标签 redis

我无法在我的 Redis 数据库中设置和检索带有重音符号的字符串。
带有重音符号的字符已编码,我如何在设置它们时将它们取回?

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

我知道这个已经被问过了 (http://stackoverflow.com/questions/6731450/redis-problem-with-accents-utf-8-encoding)但没有详细的答案。

最佳答案

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 function转换不可打印的字符(其定义取决于语言环境,并且无论如何都可能被多字节字符破坏)。

一个简单的解决方法是使用“原始”选项启动 redis-cli:

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

您自己的应用程序可能会使用其中一个客户端库而不是 redis-cli,因此这在实践中应该不是问题。

关于redis - 如何在 Redis 中保存和检索带有重音符号的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8963372/

相关文章:

redis - 使用 volatile-ttl 的奇怪 key 逐出行为

redis - 使用 jedis 客户端从 spring 中获取 aws Redis 集群

node.js - 从 Java(Spring Boot)或 Node.js 检查/连接到在 docker 中运行的 Redis

redis 移动所有键

ruby-on-rails - Redis::CommandError: ERR 客户端发送了 AUTH,但没有设置密码

python - 保存Docker容器数据

redis - AWS Elasticache redis 安全和限制

redis - CSV文件中包含大量数据的redisgraph-bulk-loader问题

redis - 获取 Redis 中列条目的总和

django - 如何找出 Celery 设置中缺少的内容?