汉字十六进制编码转换\xe4\xb8\xad\xe5\x9b\xbd

      转载请注明出处:http://blog.csdn.net/itjianghuxiaoxiong/article/details/38821423

      最近用wireshark抓包分析接口时,遇到无法将返回Json或Xml中的汉字有效显示的问题,分析发现在数据包中汉字为utf-8的十六进制编码,例如\xe4\xb8\xad\xe5\x9b\xbd,\xe4\xb8\xad\xe5\x9b\xbd\xe9\xa6\x99\xe6\xb8\xaf,无法通过“右键-->copy-->Bytes(Printable Text Only)方法将汉字字符串复制出来,给分析带来阻碍。后来发现可以用“右键-->copy-->Bytes(Hex Stream)”将汉字的十六进制编码以十六进制的形式拷贝出来,如:e4b8ade59bbd2ce4b8ade59bbde9a699e6b8af 。这样就可以通过方法来把该字符串转成汉字。每三个十六进制,可以转成一个汉字,如:0xe4,0xb8,0xad 转换成汉字就是“中”字。具体代码实现如下:

         byte[] b = {(byte)0xe4,(byte)0xb8,(byte)0xad };
         try {
		System.out.println(new String(b, "UTF-8"));
	 } catch (UnsupportedEncodingException e) {
		e.printStackTrace();
	 }

但如果字符串很长,手动改成byte[]无疑是很麻烦的,所以进行了进一步的优化,代码如下:

		String str = "e4b8ade59bbd2ce4b8ade59bbde9a699e6b8af";// 需要转换的字符串
		byte[] b = new byte[str.length() / 2];// 每两个字符为一个十六进制确定数字长度
		for (int i = 0; i < b.length; i++) {
			// 将字符串每两个字符做为一个十六进制进行截取
			String a = str.substring(i * 2, i * 2 + 2);
			b[i] = (byte) Integer.parseInt(a, 16);// 将如e4转成十六进制字节,放入数组
		}

		try {
			// 将字节数字以utf-8编码以字符串形式输出
			System.out.println(new String(b, "UTF-8"));
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}



 同时可能还会遇到url中的汉字或特殊字符如“:/”等编码问题,可以通过如下代码转换: 

		try {

			System.out.println(java.net.URLEncoder.encode("错误提示", "utf-8"));
			System.out.println(java.net.URLDecoder.decode("%E9%94%99%E8%AF%AF%E6%8F%90%E7%A4%BA", "utf-8"));
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值