您的位置:首页 > 移动开发 > Android开发

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

2016-11-25 17:23 621 查看
在开发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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐