Redis中存字段key出现 \xef \xbb \xbf

环境:

java向redis中存数据用于重复判断,结果有一条记录居然去不了重复,用Redis DeskTop Manager 查看发现,有一个 key 中居然是这样的:

20190324157:\xEF\xBB\xBF55103521621:500181463

也就是比正常的数据多了 \xEF\xBB\xBF

然后在java控制台打印日志,居然看不出区别,也就是控制台居然都是正常的  20190324157:55103521621:500181463

 

度娘得知:\xEF\xBB\xBF  是utf-8编码中特有的 BOM 隐藏字符,那么就想到办法如下:

//            假设s为可能带有BOM前缀 \xEF\xBB\xBF 的字符串
            String s = "55103521621"; 
            System.out.println(s);
//            首先把s转成GBK编码,这时会出现多余乱码字符 20190324157:?55103521621:50018146
            String s1 = new String(s.getBytes("utf-8"),"GBK");
            System.out.println(s1); //锘�55103521621
//            这时再去除多余字符即可,这里是替换所有非数字字符为空串
            String s2 = s1.replaceAll("\\D", "");//55103521621
            System.out.println(s2);//55103521621

 

 

 

参考文章如下:

======

Redis \xef \xbb \xbf 这是什么意思?

 

redis 中存了一个英文单词,但是存进去时加入了这东西:

\xef \xbb \xbf

怎么会是?

 

参考:

http://baike.baidu.com/subview/126558/5073180.htm#viewPageContent

 

=====

 

但是读取的时候第一个元素为‘\xef\xbb\xbf1883’,上网看了一些资料,原来在python的file对象的readline以及readlines程序中,针对一些UTF-8编码的文件,开头会加入BOM来表明编码方式。 
解决方法有很多种: 
1.这篇博客引用codecs模块,来判断前三个字节是否为BOM_UTF8。如果是,则剔除\xef\xbb\xbf字节。 
2.另外还有很多解决方案,可以判断列表中是否有\xef\xbb\xbf字符,如果有,用replace()替换为空的,代码如下:

    1.  
    2.  
    3. f = open("2017-5-17-1.txt","r")
    4. lightSen = []
    5.  
    6. for line in f.readlines():
    7. if '\xef\xbb\xbf' in line:
    8. str1 = line.replace('\xef\xbb\xbf','')#用replace替换掉'\xef\xbb\xbf'
    9. lightSen.append(int(str1.strip()))#strip()去掉\n
    10. else:
    11. lightSen.append(int(line.strip()))
    12.  
    13.  
    14. print(lightSen)
    15.  
    16. f.close
       
posted @ 2019-05-06 15:25  戈博折刀  阅读(940)  评论(0编辑  收藏  举报