当前位置: 首页 > 面试题库 >

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

巫马阳飙
2023-03-14
问题内容

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

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

问题答案:

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是’é’char的表示。

$ redis-cli
> set t téléphone
OK
> get t
"t\xc3\xa9l\xc3\xa9phone"

实际上,数据已正确存储在Redis服务器中。但是,当它在终端中启动时,Redis客户端会解释输出并应用sdscatrepr函数来转换不可打印的字符(其定义取决于语言环境,并且无论如何都可能会破坏多字节字符)。

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

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

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



 类似资料:
  • 我必须编写一个小程序来删除作为输入的字符串中的重音。我还必须创建一个函数,将每个带重音的字符替换为相应的不带重音的字符,我有一个循环,为main中的每个字符调用该函数: 问题是,如果我在main中提供字符串“é”作为输入,则该字符串被视为大小为2的字符串(参见下面的示例),并且上面的函数被调用两次而不是一次。此外,作为函数输入的char不是正确的。我想我在函数中遇到了相同的大小问题。这个重音不应该

  • 问题内容: 我正在尝试将Access DB转换为MySQL。一切工作正常,请期待一把大猴子扳手。。。如果access db有任何非标准字符,则它将无法工作。我的查询会告诉我: 如果我直接回显具有“无效”字符的行文本,则会在浏览器中的黑色方块中出现一个问号(因此é在回显时会变成无效的符号)。 注意:与from相同,它将接受,保存并在用于为该数据库上载命名的文本框中显示“é”罚款。另外,如果我“另存为

  • 问题内容: 如何从字符串中删除重音符号?尤其是在IE6中,我有类似以下内容: 但是IE6困扰着我,似乎不喜欢我的正则表达式。 问题答案: 使用ES2015 / ES6 String.Prototype.Normalize(), 这里发生两件事: 根据Unicode规范形式,将组合的字形分解为简单的字形。在中端起来表示为+ 。 现在,使用正则表达式字符类来匹配U + 0300→U + 036F范围,

  • 问题内容: 我正在尝试从PHP字符串中的字符中删除重音符号,作为使字符串在URL中可用的第一步。 我正在使用以下代码: 我期望的输出将是这样的: 但是,不是将重音字符音译,而是将它们替换为问号: 我在网上可以找到的所有内容都表明,设置语言环境将解决此问题,但是我已经这样做了。我已经检查了以下详细信息: 服务器支持我设置的语言环境(包含在产生的列表中) 服务器的iconv版本(包含在产生的列表中)支

  • 问题内容: 我正在尝试为我的应用程序编写一个过滤器函数,该函数将采用输入字符串并以某种方式过滤掉与给定输入不匹配的所有对象。最简单的方法是使用String的contains方法,即仅检查对象(对象中的String变量)是否包含在过滤器中指定的字符串,但这不会考虑重音。 所讨论的对象基本上是Person,而我要匹配的字符串是名称。因此,例如,如果有人搜索Joao,我希望Joáo会包含在结果集中。我已

  • 问题内容: 我想要一个自动完成功能。我对数据类型的属性有简短的描述性字符串。我在redis中有一个ID列表,其中包含按创建日期排序的数据类型,并且使用ID来设置和获取该数据类型的属性,如redis类型文档中所述。我不使用哈希表。在此设置下,获取与输入到自动完成输入框中的内容相匹配的字符串集的最佳方法是什么?遍历所有id并检查我要搜索的属性- 对于每次击键,这似乎是错误的方法。 编辑: 除了下面的答