不说了直接上代码:
1package com.yh.photo.util; 2 3public class UTF2GBK { 4 public static String gbk2utf8(String gbk) { 5 String l_temp = GBK2Unicode(gbk); 6 l_temp = unicodeToUtf8(l_temp); 7 return l_temp; 8 } 9 public String utf82gbk(String utf) { 10 String l_temp = utf8ToUnicode(utf); 11 l_temp = Unicode2GBK(l_temp); 12 return l_temp; 13 } 14 /** 15 * 16 * @param str 17 * @return String 18 */ 19 public static String GBK2Unicode(String str) { 20 StringBuffer result = new StringBuffer(); 21 for (int i = 0; i < str.length(); i++) { 22 char chr1 = (char) str.charAt(i); 23 if (!isNeedConvert(chr1)) { 24 result.append(chr1); 25 continue; 26 } 27 result.append("\\u" + Integer.toHexString((int) chr1)); 28 } 29 return result.toString(); 30 } 31 /** 32 * 33 * @param dataStr 34 * @return String 35 */ 36 public static String Unicode2GBK(String dataStr) { 37 int index = 0; 38 StringBuffer buffer = new StringBuffer(); 39 int li_len = dataStr.length(); 40 while (index < li_len) { 41 if (index >= li_len - 1 || !"\\u".equals(dataStr.substring(index, index + 2))) { 42 buffer.append(dataStr.charAt(index)); 43 index++; 44 continue; 45 } 46 String charStr = ""; 47 charStr = dataStr.substring(index + 2, index + 6); 48 char letter = (char) Integer.parseInt(charStr, 16); 49 buffer.append(letter); 50 index += 6; 51 } 52 return buffer.toString(); 53 } 54 public static boolean isNeedConvert(char para) { 55 return ((para & (0x00FF)) != para); 56 } 57 /** 58 * utf-8 转unicode 59 * 60 * @param inStr 61 * @return String 62 */ 63 public static String utf8ToUnicode(String inStr) { 64 char[] myBuffer = inStr.toCharArray(); 65 StringBuffer sb = new StringBuffer(); 66 for (int i = 0; i < inStr.length(); i++) { 67 Character.UnicodeBlock ub = Character.UnicodeBlock.of(myBuffer[i]); 68 if (ub == Character.UnicodeBlock.BASIC_LATIN) { 69 sb.append(myBuffer[i]); 70 } else if (ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) { 71 int j = (int) myBuffer[i] - 65248; 72 sb.append((char) j); 73 } else { 74 short s = (short) myBuffer[i]; 75 String hexS = Integer.toHexString(s); 76 String unicode = "\\u" + hexS; 77 sb.append(unicode.toLowerCase()); 78 } 79 } 80 return sb.toString(); 81 } 82 /** 83 * 84 * @param theString 85 * @return String 86 */ 87 public static String unicodeToUtf8(String theString) { 88 char aChar; 89 int len = theString.length(); 90 StringBuffer outBuffer = new StringBuffer(len); 91 for (int x = 0; x < len;) { 92 aChar = theString.charAt(x++); 93 if (aChar == '\\') { 94 aChar = theString.charAt(x++); 95 if (aChar == 'u') { 96 // Read the xxxx 97 int value = 0; 98 for (int i = 0; i < 4; i++) { 99 aChar = theString.charAt(x++); 100 switch (aChar) { 101 case '0': 102 case '1': 103 case '2': 104 case '3': 105 case '4': 106 case '5': 107 case '6': 108 case '7': 109 case '8': 110 case '9': 111 value = (value << 4) + aChar - '0'; 112 break; 113 case 'a': 114 case 'b': 115 case 'c': 116 case 'd': 117 case 'e': 118 case 'f': 119 value = (value << 4) + 10 + aChar - 'a'; 120 break; 121 case 'A': 122 case 'B': 123 case 'C': 124 case 'D': 125 case 'E': 126 case 'F': 127 value = (value << 4) + 10 + aChar - 'A'; 128 break; 129 default: 130 throw new IllegalArgumentException("Malformed \\uxxxx encoding."); 131 } 132 } 133 outBuffer.append((char) value); 134 } else { 135 if (aChar == 't') 136 aChar = '\t'; 137 else if (aChar == 'r') 138 aChar = '\r'; 139 else if (aChar == 'n') 140 aChar = '\n'; 141 else if (aChar == 'f') 142 aChar = '\f'; 143 outBuffer.append(aChar); 144 } 145 } else 146 outBuffer.append(aChar); 147 } 148 return outBuffer.toString(); 149 } 150} 151 152// 该代码片段来自于: http://www.sharejs.com/codes/java/5422