實現UTF-8、UCS2編碼和解碼
阿新 • • 發佈:2018-12-31
public void encodeDecode(){
String str = "測試字元轉換";
try {
//使用 URLEncoder、URLDecoder方法實現
String strGBK = URLEncoder.encode(str, "GBK");//把str字串以GBK的形式編碼
Log.i("michael","strGBK = "+strGBK); //輸出編碼後的類容
Log.i("michael","strGBK decode = "+URLDecoder.decode(strGBK, "GBK" )); //以GBK的形式解碼
String strUCS2 = URLEncoder.encode(str, "UnicodeBigUnmarked");
Log.i("michael","strUCS2 = "+strUCS2);
Log.i("michael","strUCS2 decode = "+URLDecoder.decode(strUCS2, "UnicodeBigUnmarked"));
String strUTF8 = URLEncoder.encode(str, "UTF-8" );
Log.i("michael","strUTF8 = "+strUTF8);
Log.i("michael","strUTF8 decode = "+URLDecoder.decode(strUTF8, "UTF-8"));
//使用getBytes編碼,使用 new String解碼
byte[] middleUCS2 = str.getBytes("UnicodeBigUnmarked"); //把str字串以UCS2的方式編碼
Log.i("michael","middleUCS2 bytesToHexStr = " +bytesToHexStr(middleUCS2));
Log.i("michael","middleUCS2 = bytesToHexString "+bytesToHexString(middleUCS2));
String UCSdecode = new String(middleUCS2,"UnicodeBigUnmarked"); //以UCS2的方式解碼
Log.i("michael","UCSdecode = "+UCSdecode);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
private String bytesToHexStr(byte[] b){ //轉換成16進位制
if (b == null) return "";
StringBuffer strBuffer = new StringBuffer(b.length * 3);
for (int i = 0; i < b.length; i++){
strBuffer.append(Integer.toHexString(b[i] & 0xff));
strBuffer.append(" ");
}
return strBuffer.toString();
}
public static String bytesToHexString(byte[] bytes) { //轉換成16進位制
if (bytes == null) return null;
StringBuilder ret = new StringBuilder(2 * bytes.length);
for (int i = 0; i < bytes.length; i++) {
int b;
b = 0x0f & (bytes[i] >> 4);
ret.append("0123456789abcdef".charAt(b));
b = 0x0f & bytes[i];
ret.append("0123456789abcdef".charAt(b));
}
return ret.toString();
}
Log資訊
04-20 13:30:42.965 6966-6966/com.android.yangtao.myapplication1231233 I/michael: strGBK = %B2%E2%CA%D4%D7%D6%B7%FB%D7%AA%BB%BB
04-20 13:30:42.965 6966-6966/com.android.yangtao.myapplication1231233 I/michael: strGBK decode = 測試字元轉換
04-20 13:30:42.966 6966-6966/com.android.yangtao.myapplication1231233 I/michael: strUCS2 = %6D%4B%8B%D5%5B%57%7B%26%8F%6C%63%62
04-20 13:30:42.966 6966-6966/com.android.yangtao.myapplication1231233 I/michael: strUCS2 decode = 測試字元轉換
04-20 13:30:42.966 6966-6966/com.android.yangtao.myapplication1231233 I/michael: strUTF8 = %E6%B5%8B%E8%AF%95%E5%AD%97%E7%AC%A6%E8%BD%AC%E6%8D%A2
04-20 13:30:42.966 6966-6966/com.android.yangtao.myapplication1231233 I/michael: strUTF8 decode = 測試字元轉換
04-20 13:30:42.967 6966-6966/com.android.yangtao.myapplication1231233 I/michael: middleUCS2 bytesToHexStr = 6d 4b 8b d5 5b 57 7b 26 8f 6c 63 62
04-20 13:30:42.967 6966-6966/com.android.yangtao.myapplication1231233 I/michael: middleUCS2 = bytesToHexString 6d4b8bd55b577b268f6c6362
04-20 13:30:42.967 6966-6966/com.android.yangtao.myapplication1231233 I/michael: UCSdecode = 測試字元轉換