o13674976542 发表于 2019-5-13 16:28:43

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

写数据:
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   &    000000000001abilityabilityj�B�JAVA/hadoop/spark/es    &    000000000001abilityabilityj�B�JAVA/hadoop/spark/es    &    000000000001abilityabilityj�B�JAVA/hadoop/spark/es

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

hyj 发表于 2019-5-13 16:44:32

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

o13674976542 发表于 2019-5-13 16:48:11

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

读取在 IDEA 的 控制台

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

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

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


使用Bytes.toString 应该就可以了
页: [1]
查看完整版本: HBase写入数据后再拿出来乱码求救