【问题标题】:Cyrillic in redisredis 中的西里尔字母
【发布时间】:2020-09-20 09:45:28
【问题描述】:

使用redis-cli,我将Cyrillic的数据添加到redis队列中,如果使用redis-cli获取队列数据,我们会看到"\xaf\xe0\xae\xa1\xa0"。

在进行中

msg, _ := redis.String(R.conn.Do("LPOP", key))

结果

我怎样才能得到西里尔字母? 我试过了

encoder := charmap.MacintoshCyrillic.NewDecoder() // Windows1251 to
s, _ := encoder.String(msg)
fmt.Print(s)

没用

【问题讨论】:

  • 看起来您正在使用 Redigo 客户端。 Redigo 不会转换或转换发送到或从 Redis 服务器发送的字节。
  • "\xaf\xe0\xae\xa1\xa0" 字符串对应于cp866 编码中的俄语单词проба(测试,样本)。使用b"\xaf\xe0\xae\xa1\xa0".decode('cp866')在python中尝试。
  • @JosefZ 感谢go encoder := charmap.CodePage866.NewDecoder() s, _ := encoder.String(msg) 它有效
  • @JosefZ 你怎么知道是俄语,同一个词可以是塞尔维亚语、白俄罗斯语、乌克兰语...????
  • @Z.Kosanovic 它是俄语,但我不主张独家声称...例如,谷歌翻译检测 проба 保加利亚语……对不起……

标签: go redis decode cyrillic redis-cli


【解决方案1】:

当您看到这样的垃圾符号时,问题通常是用一种格式编码的数据(文本)被解码为其他格式。

我使用 chardetect (python) 来确定输入数据的编码方式:

echo -e "\xaf\xe0\xae\xa1\xa0" | tee /tmp/j | chardetect 
<stdin>: IBM866 with confidence 0.99

uchardet 也可以:

$ uchardet /tmp/j
IBM866

正确显示单词:

$ echo -e "\xaf\xe0\xae\xa1\xa0" | iconv -f IBM866 -t UTF-8
проба

类似项目:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    • 2023-03-08
    • 2018-06-02
    • 2011-11-19
    相关资源
    最近更新 更多