\345\207\235\346\266\265\346\237\217은 어떤 인코딩인가요? 디코딩 후 내용은 무엇입니까?
/**8진수 데이터가 포함된 문자열을 중국어 문자열로 변환합니다.
* 예를 들어, DynamicMsg: \344\270\215\350\203\27510을 DynamicMsg: can 10*/
public static String transfromOctalToString(String dataStr) {<로 변환합니다. / p>
if (! dataStr.contains("\\")) {
return dataStr;
}
//속하지 않음 8진수 콘텐츠 문자로
StringBuilder oldBuffer = new StringBuilder();
//8진수에 속한 콘텐츠는 16진수로 변환된 후 여기에 캐시됩니다.
StringBuilder hexBuffer = new StringBuilder();
for (int i = 0; i < dataStr.length(); i ++) {
char c = dataStr.charAt(i);
if (c != '\\') {
oldBuffer.append(c);
}
//역 세 개의 슬래시 그룹이 8진수를 형성합니다.
예를 들어\20710, 실제로 207은 8진수를 형성합니다.
else {
char c1 = dataStr.charAt(i + 1);
char c2 = dataStr .charAt(i + 2);
char c3 = dataStr.charAt(i + 3);
i += 3;
//변환합니다 8진수를 10진수로, 그 다음 16진수로
String hex = Integer.toHexString((Integer.valueOf("" + c1 + c2 + c3, 8)));
//Cache 3바이트가 수집될 때까지
hexBuffer.append(hex);
String hexString = hexBuffer.toString();
//utf8 인코딩에서는 3바이트 한자는 1개입니다
if (hexString.length() == 6) {
//3바이트이면 충분합니다. 한자로 변환하여 oldBuffer에 넣습니다.
oldBuffer.append(hexStr2Str(hexString));
//한자가 충분하면 캐시를 삭제하세요.
hexBuffer = new StringBuilder();
}
}
}
oldBuffer.toString()을 반환;
}
/**
* 16진수 변환 문자열
*/
private static String hexStr2Str(String hexStr) {
String str = " 0123456789abcdef";
char[] hexs = hexStr.toCharArray();
byte[] bytes = 새 바이트[ hexStr.length() / 2];
int n;
for (int i = 0; i < bytes.length; i++) {
n = str.indexOf(hexs[2 * i]) * 16 ;
n += str.indexOf(hexs[2 * i + 1]);
bytes[i] = (바이트) (n & 0xff);
}
새 문자열(바이트, StandardCharsets.UTF_8)을 반환합니다.
}