分享

HBase写入数据后再拿出来乱码求救

回帖奖励 97 云币      回复本帖可获得 1 云币奖励! 每人限 1 次
写数据:
put.addColumn("ability".getBytes(), "ability".getBytes(), Bytes.toBytes(infos[1]));


读数据
Connection connection = HBaseConnectionUtil.getConnection();
Table table = connection.getTable(TableName.valueOf("jobs"));
ResultScanner scanner = table.getScanner(new Scan());
for(Result result:scanner){
    byte[] row = result.getRow();
    System.out.print("rowkey: "+new String(row));
    List<Cell> cells = result.listCells();
    for (Cell cell:cells){
        byte[] familyArray = cell.getFamilyArray();
        byte[] qualifierArray = cell.getQualifierArray();
        byte[] valueArray = cell.getValueArray();
        System.out.print(new String(familyArray,"utf-8")+" "+new String(qualifierArray,"utf-8")+" "+new String(valueArray));
    }
    System.out.println();
}


读出来的数据
rowkey: 000000000001   &    000000000001abilityability  j&#65533;B&#65533;JAVA/hadoop/spark/es    &    000000000001abilityability  j&#65533;B&#65533;JAVA/hadoop/spark/es    &    000000000001abilityability  j&#65533;B&#65533;JAVA/hadoop/spark/es

不知道为什么,gbk、GB2312/UTF-8 都不行
写数据是从kafka 拉出来的,此时读到控制台也还正常
求解,感谢

已有(6)人评论

跳转到指定楼层
hyj 发表于 2019-5-13 16:44:32

回帖奖励 +1 云币

读出来是指读到什么地方。
如果控制台是正常的,说明控制台的编码是正确的。
在什么环境中读取,说明当前环境编码需要设置下。
如果在shell中,则设置下shell编码
回复

使用道具 举报

o13674976542 发表于 2019-5-13 16:48:11
hyj 发表于 2019-5-13 16:44
读出来是指读到什么地方。
如果控制台是正常的,说明控制台的编码是正确的。
在什么环境中读取,说明当前 ...

读取在 IDEA 的 控制台
回复

使用道具 举报

pig2 发表于 2019-5-13 18:31:11

回帖奖励 +1 云币

o13674976542 发表于 2019-5-13 16:48
读取在 IDEA 的 控制台

通过hbase shell去看下插入里面的数据是否有乱码

回复

使用道具 举报

o13674976542 发表于 2019-5-13 19:02:46
pig2 发表于 2019-5-13 18:31
通过hbase shell去看下插入里面的数据是否有乱码

不乱码,已解决,原因未知
乱码是因为直接使用Bytes.toString
解决方法是
Bytes.toString(CellUtil.cloneFamily(cell))
使用CellUtil  
感谢回复
回复

使用道具 举报

xiaobaiyang 发表于 2019-5-14 09:30:35

回帖奖励 +1 云币

o13674976542 发表于 2019-5-13 19:02
不乱码,已解决,原因未知
乱码是因为直接使用Bytes.toString
解决方法是

使用Bytes.toString 应该就可以了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条