我无法在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)但没有详细的答案。
答案 0 :(得分:19)
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来转换不可打印的字符(其定义依赖于语言环境,并且可能会因多字节字符而中断)。
一个简单的解决方法是使用'raw'选项启动redis-cli:
$ redis-cli --raw
> get t
téléphone
您自己的应用程序可能会使用其中一个客户端库而不是redis-cli,因此在实践中它应该不是问题。