1. 程式人生 > >Android 16進位制轉中文(解決出現亂碼問題)

Android 16進位制轉中文(解決出現亂碼問題)

今天在專案裡面要把16進位制的字串轉換為中文,但是轉換的都是亂碼,後來又把轉換函式放在java專案裡面能夠正常轉換,一般出現亂碼第一想到的就是編碼方式,我之前一直是用的utf-8,查了資料,看見有人說utf-8沒有起作用,要用GB2312,我換了一下,果然有效。程式碼如下:

package com.quickpasslibrary.utils;

import java.io.ByteArrayOutputStream;

/**
 * 進位制之間的轉換
 * @author jwzhangjie
 *
 */
public class HexadecimalConver {
	
	private static String hexString="0123456789ABCDEF";
	public static String toStringHex(String s){
	  byte[] baKeyword = new byte[s.length()/2];
	  for(int i = 0; i < baKeyword.length; i++){
	   try{
	    baKeyword[i] = (byte)(0xff & Integer.parseInt(s.substring(i*2, i*2+2),16));
	   }catch(Exception e){
	    e.printStackTrace();
	   }
	  }
	  try{
	   s = new String(baKeyword, "GB2312");
	  }catch (Exception e1){
	   e1.printStackTrace();
	  }
	  return s;
	 }
	 
	 /**
	  * 將字串編碼成16進位制數字,適用於所有字元(包括中文)
	  */
	 public static String encode(String str){
	  //根據預設編碼獲取位元組陣列
	  byte[] bytes=str.getBytes();
	  StringBuilder sb=new StringBuilder(bytes.length*2);
	  //將位元組陣列中每個位元組拆解成2位16進位制整數
	  for(int i=0;i<bytes.length;i++){
	   sb.append(hexString.charAt((bytes[i]&0xf0)>>4));
	   sb.append(hexString.charAt((bytes[i]&0x0f)>>0));
	  }
	  return sb.toString();
	 }
	 /**
	  * 將16進位制數字解碼成字串,適用於所有字元(包括中文)
	  */
	 public static String decode(String bytes)
	 {
		  ByteArrayOutputStream baos=new ByteArrayOutputStream(bytes.length()/2);
		  //將每2位16進位制整陣列裝成一個位元組
		  for(int i=0;i<bytes.length();i+=2)
		  baos.write((hexString.indexOf(bytes.charAt(i))<<4 |hexString.indexOf(bytes.charAt(i+1))));
		  String bb = "";
		  try {
			  bb = new String(baos.toByteArray(), "GB2312");
		  } catch (Exception e) {
			  e.printStackTrace();
		  }
	  return bb;
	 }
}