关于
HBase中的中文数据显示为十六进制码
在使用
hbase ImportTsv命令将含中文的tsv文件从hdfs上传到
hbase后,出现以下所示现象,中文字符显示为十六进制码。
在hhase shell中,直接使用如下命令:
scan 'zhihu',{COLUMNS => 'text::toString'}
这里’zhihu’为表名,text: 为列名
会以中文格式显示:
注意:该tsv文件已经是utf-8格式
DataInputStream dis = null;
dis = new DataInputStream(new FileInputStream("F:\\out.data"));
byte []b = new byte [1024];
dis.read(b);
String helloHex = DatatypeConverter.printHexBinary(b);
System.out.printf("Hello hex: 0x%s\n", helloHex);
此处读取输出
由于项目中经常遇到与设备进行交互获取数据,不仅有Python版本、还有Java版本,还可能会有C#版本,在此做个记录。一、十六进制转换工具类主要包含十六进制字符串转ASCII,ASCII转十六进制字符串以及十六进制字符串转Byte数组等方法:/**
* Created by wly on 2018/4/17.
public class HexConvert {
public stati...
hbase(main):001:0> get 'table_name', 'row_key', {COLUMN => 'column_family:column_name', FORMAT => 'hex'}
其中,`table_name`为表名,`row_key`为需要转换的
16进制row key,`column_family`和`column_name`为列族和列名,`FORMAT => 'hex'`参数指定输出结果为
16进制。
3. 使用Linux命令`echo`和`bc`将
16进制转换为10进制:
hbase(main):002:0> echo "ibase=16; $(get 'table_name', 'row_key', {COLUMN => 'column_family:column_name', FORMAT => 'hex'})" | bc
其中,`ibase=16`指定输入为
16进制,`$(get 'table_name', 'row_key', {COLUMN => 'column_family:column_name', FORMAT => 'hex'})`为上一步中获取的
16进制结果。
执行以上命令即可将
16进制的row key转换为10进制。