分享

在windows下读写hbase 中文汉字

k9009147217 发表于 2016-11-4 10:53:09 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 4 7509
hbase是部署在centos下的,我的工作环境在windows下就是运用windows远程访问centos下的数据库hbase,在将汉字存储到hbase的时候在读出来发现是乱码,而且部分是乱码,比如‘律师事务所’,只会显示律师事物后面是乱码,即使我在存储的时候指定存储的内容是utf8或者gbk存储,读取的时候转换成对应的格式,还是一样乱码,这个应该如何处理

已有(4)人评论

跳转到指定楼层
k9009147217 发表于 2016-11-4 11:09:39
刚刚改好了 在这里说一下 (每个人的配置都不一样,解决方法可能也不一样 仅供参考)
1、将centos的编码改为gbk
vi /root/.bash_profile
export LC_ALL="zh_CN.GBK"
   export LANG="zh_CN.GBK"
   export LANG=en_US
2、在windows下远程访问hbase的存储时处理如下:
put.addColumn(Bytes.toBytes(colFamily), Bytes.toBytes(col), val.getBytes("GBK"));
val中就是存储的中文部分
3、在windows下读取的时候直接读取即可无需再次转换
这种方式目前可以实现在windwos下存储中文然后windows下读取中文,如果大家有好的解决方法或者这个方法有什么改进的地方希望大家指正,我对于编码这块不是很熟悉
附加代码检测字符串编码格式:
public static String getEncoding(String str) {   
         String encode = "GB2312";   
        try {   
            if (str.equals(new String(str.getBytes(encode), encode))) {   
                 String s = encode;   
                return s;   
             }   
         } catch (Exception exception) {   
         }   
         encode = "ISO-8859-1";   
        try {   
            if (str.equals(new String(str.getBytes(encode), encode))) {   
                 String s1 = encode;   
                return s1;   
             }   
         } catch (Exception exception1) {   
         }   
         encode = "UTF-8";   
        try {   
            if (str.equals(new String(str.getBytes(encode), encode))) {   
                 String s2 = encode;   
                return s2;   
             }   
         } catch (Exception exception2) {   
         }   
         encode = "GBK";   
        try {   
            if (str.equals(new String(str.getBytes(encode), encode))) {   
                 String s3 = encode;   
                return s3;   
             }   
         } catch (Exception exception3) {   
         }   
        return "";   
     }   
回复

使用道具 举报

k9009147217 发表于 2016-11-4 11:26:58
有测试了一下这样的话在centos下读取的是乱码,半吊子解决方法
回复

使用道具 举报

k9009147217 发表于 2016-11-4 11:34:51
还得继续找方法
回复

使用道具 举报

langke93 发表于 2016-11-4 14:48:38

这个其实都是编码不同造成的。
一般来讲Linux默认是utf8
如果是window客户端如xshell之类的ssh工具则是默认gbk。


回复

使用道具 举报

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

本版积分规则

关闭

推荐上一条 /2 下一条