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

使用接口实现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 = 测试字符转换
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值