实现Unicode编码与可读字符的转换。
今天遇到的错误提示,提示全是Unicode编码,写了一段代码将错误提示转为可读。
测试结果如下:
package com.demo;
import java.io.UnsupportedEncodingException;
public class GetUnicode {
public static void main(String[] args) throws UnsupportedEncodingException {
String unicode = "jdk1.8\\u73af\\u5883\\u4e0b\\u6253\\u5305\\u65f6\\u62a5\\u9519 \\u201c-source 1.5 \\u4e2d\\u4e0d\\u652f\\u6301 lambda \\u8868\\u8fbe\\u5f0f\\u201d ";
System.out.println("待转换unicode字符");
System.out.println(unicode);
String str = unicodeToString(unicode);
System.out.println("转换Unicode字符为可读字符");
System.out.println(str);
String unicodeStr = stringToUnicode(str);
System.out.println("反转测试");
System.out.println(unicodeStr);
}
public static String stringToUnicode(String unicode) {
char[] chars = unicode.toCharArray();
StringBuilder builder = new StringBuilder();
for (int i = 0; i < chars.length ; i++) {
if (chars[i]>= 0 && chars[i]<=127){
builder.append(chars[i]);
}else {
builder.append("\\u");
String hx = Integer.toString(chars[i], 16);
if (hx.length()<4){
builder.append("0000".substring(hx.length())).append(hx);
}else {
builder.append(hx);
}
}
}
return builder.toString();
}
public static String unicodeToString(String s) {
String[] split = s.split("\\\\");
StringBuilder builder = new StringBuilder();
for (int i = 0; i < split.length ; i++) {
if (split[i].startsWith("u")){
builder.append((char) Integer.parseInt(split[i].substring(1,5), 16));
if(split[i].length()>5){
builder.append(split[i].substring(5));
}
}else {
builder.append(split[i]);
}
}
return builder.toString();
}
}