1 public class UnicodeUtil { 2 3 //编码 4 public static String encode(String string) { 5 StringBuilder sbr = new StringBuilder(string.length() * 4); 6 for (char ch : string.toCharArray()) { 7 if (ch > 0xfff) { 8 sbr.append("\\u"); 9 sbr.append(Integer.toHexString(ch).toUpperCase(java.util.Locale.ENGLISH)); 10 } else if (ch > 0xff) { 11 sbr.append("\\u0"); 12 sbr.append(Integer.toHexString(ch).toUpperCase(java.util.Locale.ENGLISH)); 13 } else if (ch > 0x7f) { 14 sbr.append("\\u00"); 15 sbr.append(Integer.toHexString(ch).toUpperCase(java.util.Locale.ENGLISH)); 16 } else if (ch < 32) { 17 switch (ch) { 18 case '\b': 19 sbr.append('\\'); 20 sbr.append('b'); 21 break; 22 case '\n': 23 sbr.append('\\'); 24 sbr.append('n'); 25 break; 26 case '\t': 27 sbr.append('\\'); 28 sbr.append('t'); 29 break; 30 case '\f': 31 sbr.append('\\'); 32 sbr.append('f'); 33 break; 34 case '\r': 35 sbr.append('\\'); 36 sbr.append('r'); 37 break; 38 default: 39 if (ch > 0xf) { 40 sbr.append("\\u00"); 41 sbr.append(Integer.toHexString(ch).toUpperCase(java.util.Locale.ENGLISH)); 42 } else { 43 sbr.append("\\u000"); 44 sbr.append(Integer.toHexString(ch).toUpperCase(java.util.Locale.ENGLISH)); 45 } 46 break; 47 } 48 } else { 49 switch (ch) { 50 case '\'': 51 sbr.append("\\u0027"); 52 break; 53 case '"': 54 case '\\': 55 sbr.append("\\"); 56 sbr.append(ch); 57 break; 58 default: 59 sbr.append(ch); 60 break; 61 } 62 } 63 } 64 return sbr.toString(); 65 } 66 67 //解码 68 public static String decode(String unicode) { 69 char[] chars = unicode.toCharArray(); 70 StringBuilder buffer = new StringBuilder(); 71 for (int i = 0, len = chars.length; i < len;) { 72 char c = chars[i++]; 73 switch (c) { 74 case 0: 75 case '\n': 76 case '\r': 77 break; 78 case '\\': 79 c = chars[i++]; 80 switch (c) { 81 case 'b': 82 buffer.append('\b'); 83 break; 84 case 't': 85 buffer.append('\t'); 86 break; 87 case 'n': 88 buffer.append('\n'); 89 break; 90 case 'f': 91 buffer.append('\f'); 92 break; 93 case 'r': 94 buffer.append('\r'); 95 break; 96 case 'u': 97 buffer.append((char) Integer.parseInt(new String(new char[] {// 98 chars[i++], chars[i++], chars[i++], chars[i++] // 99 }), 16));// 100 break; 101 case 'x': 102 buffer.append((char) Integer.parseInt(new String(new char[] {// 103 chars[i++], chars[i++] // 104 }), 16));// 105 break; 106 default: 107 buffer.append(c); 108 } 109 break; 110 default: 111 buffer.append(c); 112 } 113 } 114 return buffer.toString(); 115 } 116 117 public static void main(String[] args) { 118 String unicode = encode("你好Unicode"); 119 System.out.println(unicode); 120 System.out.println(decode(unicode)); 121 } 122 }