HBase shell 中的十六进制数值表示
2019獨角獸企業重金招聘Python工程師標準>>>
在使用Hbase shell 進行get 或scan操作時,時不時會看到一些數值被轉成了16進制, 就像下面那樣
value=W\x5C5\x80
那么這個值具體等于多少? 查閱資料后發現算法如下
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"))); //輸出結果:e4b8ade69687System.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 ->?\xe4\xb8\xad\xe6\x96\x87?
?
舉個例子:?
我要查詢的key是
CE20CCE09EEB4F8A6BB50E41953A55FCD|3|鋼鐵烈陽37|PA-1453442402-6111|PR-1453442402-3599
直接
get 'role_history_info' , 'CE20CCE09EEB4F8A6BB50E41953A55FCD|3|鋼鐵烈陽37|PA-1453442402-6111|PR-1453442402-3599'
沒有結果
把其中的中文字符按照上面的方法轉成如下
鋼鐵烈陽->e992a2e99381e78388e998b3 ->?\xe9\x92\xa2\xe9\x93\x81\xe7\x83\x88\xe9\x98\xb3
查詢時 包著key的單引號換成雙引號
get 'role_history_info' , "CE20CCE09EEB4F8A6BB50E41953A55FCD|3|\xe9\x92\xa2\xe9\x93\x81\xe7\x83\x88\xe9\x98\xb337|PA-1453442402-6111|PR-1453442402-3599"
?
查出來啦...
轉載于:https://my.oschina.net/sniperLi/blog/1616459
總結
以上是生活随笔為你收集整理的HBase shell 中的十六进制数值表示的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: shell中的$()、${}、$(())
- 下一篇: windows reload()