hadoop web中查看文件内容乱码解决

 

错误描述:在50075查看hdfs数据文件中有 & 符号时,中文数据乱乱码

错误原因:系统默认字符集:Charset.defaultCharset().name() 为UTF-8,但是在系统在web程序中取出得编码值为:US-ASCII。在字符串编码时,默认使用的是US-ASCII字符集,该字符集应该是UTF-8子集中的单字符集,导致中文无法由byte拼装还原。

 

参考:String类

public String(byte bytes[], int offset, int length)

public byte[] getBytes()

 

URL地址:http://datanode:50075/browseBlock.jsp?blockId=1073779813&blockSize=15&genstamp=1099511816876&filename=%2Ftmp%2Fwankun%2Faccountinput%2Fd&datanodePort=50010&namenodeInfoPort=50070&nnaddr=192.168.39.123:8020


问题解决:

包:hadoop-common-2.3.0-cdh5.0.1.jar

类:org.apache.hadoop.http.HtmlQuoting 

修改代码:

 

  public static String quoteHtmlChars(String item) {

    if (item == null) {

      return null;

    }

    byte[] bytes = item.getBytes(Charsets.UTF_8);

    if (needsQuoting(bytes, 0, bytes.length)) {

      ByteArrayOutputStream buffer = new ByteArrayOutputStream();

      try {

        quoteHtmlChars(buffer, bytes, 0, bytes.length);

        return buffer.toString("UTF-8");

      } catch (IOException ioe) {

        // Won't happen, since it is a bytearrayoutputstream

      }

      return item;

    } else {

      return item;

    }

  }

  

备注:

1. UTF-8={US-ASCII + 多字符集}

2. 字符串解码还原时,使用的是UTF-8字符集

3. 单独测试,系统默认用UTF-8进行编码,但是HtmlQuoting中却用US-ASCII编码

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值