实现UTF-8、UCS2编码和解码

版权声明:本文为博主原创文章,未经博主允许不得转载。 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 = 测试字符转换

猜你喜欢

转载自blog.csdn.net/michael_yt/article/details/70257559
今日推荐