我正在redis中进行setbit操作,以标记特定日期哪些用户在线。
我正在做一个redis get操作来获取密钥的值。
coffee> redis.setbit "a",7,1 true coffee> redis.setbit "d",4,1 true coffee> redis.setbit "g",1,1 true coffee> redis.setbit "h",0,1
输出是
coffee> redis.get "a",(err,res)->console.log res.toString().charCodeAt(0) true coffee> 1 coffee> redis.get "d",(err,res)->console.log res.toString().charCodeAt(0) true coffee> 8 coffee> redis.get "g",(err,res)->console.log res.toString().charCodeAt(0) true coffee> 64 coffee> redis.get "h",(err,res)->console.log res.toString().charCodeAt(0) true coffee> 65533
我的问题是在“ h”键处设置了第0位1。它应该返回128但返回65533。为什么这样?
我的最终目标是从redis中以二进制形式获取位图,以便我可以确定在特定日期哪些用户处于活动状态。
发生此错误是由于utf-8编码。当我们将第0位设置为1时,它不遵循utf-8规则。现在,当我们尝试获取它时,我们得到了替换角色
U + FFFD-替换字符,用于替换未知或无法表示的字符
当我们对它执行charCodeAt时,将得到65533。
在此处阅读UTF-8和特殊Unicode块