漢字十六進制編碼轉換\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();
		}



發佈了28 篇原創文章 · 獲贊 89 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章