Android 解决使用Log打印日志的时候中文是乱码(unicode)

在Android开发中,当打印包含中文的Log时,可能会出现Unicode乱码问题。本文提供了一种方法来解决这个问题,虽然该方法可能略微影响性能,建议在必要时使用。测试DEMO展示了如何将Unicode编码转换为UTF-8,通过将16进制的Unicode编码转换为10进制并强制转换为char类型,从而正确显示中文字符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在开发APP过程中经常会打印出网络获取的数据,但这时你会发现打印出来的log是Unicode格式:

 {"state":{"code":10200,"msg":"\u83b7\u53d6\u6210\u529f"},"data":{}}

看不出是什么中文内容,希望下面方法可以帮助大家解决问题。
下面方法在处理时会影响小小性能,见意控制使用!

    public static String unicodeToUTF_8(String src) {
        if (null == src) {
            return null;
        }
        System.out.println("src: " + src);
        StringBuilder out = new StringBuilder();
        for (int i = 0; i < src.length();) {
            char c = src.charAt(i);
            if (i + 6 < src.length() && c == '\\' && src.charAt(i + 1) == 'u') {
                String hex = src.substring(i + 2, i + 6);
                try {
                    out.append((char) Integer.parseInt(hex, 16));
                } catch (NumberFormatException nfe) {
                    nfe.fillInStackTrace();
                }
                i = i + 6;
            } else {
                out.append(src.charAt(i));
                ++i;
            }
        }
        return out.toString();

    }

测试DEMO:

package cyy.demo;

public class Test {

    private static final String SRC = "\"state\":{\"code\":10200,\"msg\":\"\\u83b7\\u53d6\\u6210\\u529f\"},\"data\":{}}";

    public static void main(String[] args) {
        String out = unicodeToUTF_8(SRC);
        System.out.println("out: " + out);
    }
}

OUTPUT:

src: "state":{"code":10200,"msg":"\u83b7\u53d6\u6210\u529f"},"data":{}}
out: "state":{"code":10200,"msg":"获取成功"},"data":{}}

原理:
Unicode 编码转UTF-8
Unicode它用两个字节来编码一个字符, 比如汉字”经”的编码是0x7ECF,注意字符码一般用十六进制来 表示。
所以获取到16进制之后转成10进制再强转char类型即可!
(char) Integer.parseInt(hex, 16)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值