Android 에서 로그 인쇄 로 그 를 사용 할 때 중국어 가 난 장 판(유 니 코드)을 해결 합 니 다.
4398 단어 android_problem
{"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();
}
테스트 데모:
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":{}}
원리:유 니 코드 인 코딩 은 UTF-8 유 니 코드 로 두 바이트 로 한 문 자 를 인 코딩 합 니 다.예 를 들 어 한자'경'의 인 코딩 은 0x7ECF 입 니 다.문자 코드 는 보통 16 진법 으로 표 시 됩 니 다.그래서 16 진법 을 획득 한 후 10 진법 으로 전환 하고 char 형식 을 강하 게 돌리 면 됩 니 다!(char) Integer.parseInt(hex, 16)