版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/michael_yt/article/details/70257559
使用接口实现UTF-8、UCS2的编解码。
编码的原理知识可以看:https://www.zhihu.com/question/23374078
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 = 测试字符转换