• HBase shell 中的十六进制数值表示


    在使用Hbase shell 进行get 或scan操作时,时不时会看到一些数值被转成了16进制, 就像下面那样

    value=Wx5C5x80

    那么这个值具体等于多少? 查阅资料后发现算法如下

    W -> W的ASCII码16进制 为 0x57

    x5C -> 就是16进制不变 0x5C

    5 -> 5的ASCII码16进制 为 0x35

    x80 -> 就是16进制不变 0x80

    所以从左往右重新拼起来就是

    0x575C3580 -> 转成十进制为  1465660800

    所以照例,如下

    value=W]PA

    W -> W的ASCII码16进制 为 0x57

    ] -> ]的ASCII码16进制 为 0x5D

    P -> P的ASCII码16进制 为 0x50

    A -> A的ASCII码16进制 为 0x41

    0x575D5041 -> 转成十进制为  1465733185


    以上是查询结果出现十六进制的情况, 那么如果查询的Key本身也被转为16进制怎么办? 因为有时候key中可能有中文字符.

    可以照如下操作:

    先写个简单测试程序把中文UTF-8转成16进制

    System.out.println(org.apache.commons.codec.binary.Hex.encodeHex("中文".getBytes("UTF-8")));
    //输出结果:e4b8ade69687

    System.out.println(new String(org.apache.commons.codec.binary.Hex.decodeHex("e4b8ade69687".toCharArray()),"UTF-8"));
    //输出结果:中文

    也可以直接使用网站工具

    https://sites.google.com/site/nathanlexwww/tools/utf8-convert

    转好后把16进制每2位一组前面加上x

    就比如上面的

    e4b8ade69687 -> xe4xb8xadxe6x96x87 

    举个例子: 

    我要查询的key是

    CE20CCE09EEB4F8A6BB50E41953A55FCD|3|钢铁烈阳37|PA-1453442402-6111|PR-1453442402-3599

    直接

    get 'role_history_info' , 'CE20CCE09EEB4F8A6BB50E41953A55FCD|3|钢铁烈阳37|PA-1453442402-6111|PR-1453442402-3599'

    没有结果

    把其中的中文字符按照上面的方法转成如下

    钢铁烈阳->e992a2e99381e78388e998b3 -> xe9x92xa2xe9x93x81xe7x83x88xe9x98xb3

    查询时 包着key的单引号换成双引号

    get 'role_history_info' , "CE20CCE09EEB4F8A6BB50E41953A55FCD|3|xe9x92xa2xe9x93x81xe7x83x88xe9x98xb337|PA-1453442402-6111|PR-1453442402-3599"

    查出来啦...

  • 相关阅读:
    MongoDB面试题
    spider 爬虫文件基本参数(3)
    命令行工具(2)
    初始scrapy,简单项目创建和CSS选择器,xpath选择器(1)
    数据分析实例(离海洋距离与最高温度之间的关系分析)
    路飞业务分析
    MYSQL 主从复制,读写分离(8)
    pyquery 学习
    selenium case报错重新执行
    python小技巧
  • 原文地址:https://www.cnblogs.com/drwong/p/5622035.html
Copyright © 2020-2023  润新知