c84d04c5f31777e9e8e3055929c8bfcfe344eda9.svn-base 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. package xin.glue.cargocnHttpClient;
  2. import java.io.UnsupportedEncodingException;
  3. /**
  4. * 转换字符串的编码
  5. *
  6. * @author KangMiao
  7. * @Date 2015-4-15 13:55:56
  8. *
  9. */
  10. public class ChangeCharset {
  11. /** 7位ASCII字符,也叫作ISO646-US、Unicode字符集的基本拉丁块 */
  12. public static final String US_ASCII = "US-ASCII";
  13. /** ISO 拉丁字母表 No.1,也叫作 ISO-LATIN-1 */
  14. public static final String ISO_8859_1 = "ISO-8859-1";
  15. /** 8 位 UCS 转换格式 */
  16. public static final String UTF_8 = "UTF-8";
  17. /** 16 位 UCS 转换格式,Big Endian(最低地址存放高位字节)字节顺序 */
  18. public static final String UTF_16BE = "UTF-16BE";
  19. /** 16 位 UCS 转换格式,Little-endian(最高地址存放低位字节)字节顺序 */
  20. public static final String UTF_16LE = "UTF-16LE";
  21. /** 16 位 UCS 转换格式,字节顺序由可选的字节顺序标记来标识 */
  22. public static final String UTF_16 = "UTF-16";
  23. /** 中文超大字符集 */
  24. public static final String GBK = "GBK";
  25. /**
  26. * 将字符编码转换成US-ASCII码
  27. */
  28. public static String toASCII(String str)
  29. throws UnsupportedEncodingException {
  30. return changeCharset(str, US_ASCII);
  31. }
  32. /**
  33. * 将字符编码转换成ISO-8859-1码
  34. */
  35. public static String toISO_8859_1(String str)
  36. throws UnsupportedEncodingException {
  37. return changeCharset(str, ISO_8859_1);
  38. }
  39. /**
  40. * 将字符编码转换成UTF-8码
  41. */
  42. public static String toUTF_8(String str)
  43. throws UnsupportedEncodingException {
  44. return changeCharset(str, UTF_8);
  45. }
  46. /**
  47. * 将字符编码转换成UTF-16BE码
  48. */
  49. public static String toUTF_16BE(String str)
  50. throws UnsupportedEncodingException {
  51. return changeCharset(str, UTF_16BE);
  52. }
  53. /**
  54. * 将字符编码转换成UTF-16LE码
  55. */
  56. public static String toUTF_16LE(String str)
  57. throws UnsupportedEncodingException {
  58. return changeCharset(str, UTF_16LE);
  59. }
  60. /**
  61. * 将字符编码转换成UTF-16码
  62. */
  63. public static String toUTF_16(String str)
  64. throws UnsupportedEncodingException {
  65. return changeCharset(str, UTF_16);
  66. }
  67. /**
  68. * 将字符编码转换成GBK码
  69. */
  70. public static String toGBK(String str) throws UnsupportedEncodingException {
  71. return changeCharset(str, GBK);
  72. }
  73. /**
  74. * 字符串编码转换的实现方法
  75. * @param str 待转换编码的字符串
  76. * @param newCharset 目标编码
  77. * @return
  78. * @throws UnsupportedEncodingException
  79. */
  80. public static String changeCharset(String str, String newCharset)
  81. throws UnsupportedEncodingException {
  82. if (str != null) {
  83. // 用默认字符编码解码字符串。
  84. byte[] bs = str.getBytes();
  85. // 用新的字符编码生成字符串
  86. return new String(bs, newCharset);
  87. }
  88. return null;
  89. }
  90. /**
  91. * 字符串编码转换的实现方法
  92. * @param str 待转换编码的字符串
  93. * @param oldCharset 原编码
  94. * @param newCharset 目标编码
  95. * @return
  96. * @throws UnsupportedEncodingException
  97. */
  98. public static String changeCharset(String str, String oldCharset,
  99. String newCharset) throws UnsupportedEncodingException {
  100. if (str != null) {
  101. // 用旧的字符编码解码字符串。解码可能会出现异常。
  102. byte[] bs = str.getBytes(oldCharset);
  103. // 用新的字符编码生成字符串
  104. return new String(bs, newCharset);
  105. }
  106. return null;
  107. }
  108. /**
  109. * 字符串编码转换unicode
  110. * @param str 待转换编码的字符串
  111. * @return
  112. */
  113. public static String stringToUnicode(String s) {
  114. String unicode = "";
  115. char[] charAry = new char[s.length()];
  116. for(int i=0; i<charAry.length; i++) {
  117. charAry[i] = (char)s.charAt(i);
  118. unicode+="\\u" + Integer.toString(charAry[i], 16);
  119. }
  120. return unicode;
  121. }
  122. /**
  123. * unicode编码转换字符串
  124. * @param str 待转换编码的字符串
  125. * @return
  126. */
  127. public static String unicodeToString(String unicodeStr){
  128. StringBuffer sb = new StringBuffer();
  129. String str[] = unicodeStr.toUpperCase().split("\\\\U");
  130. for(int i=0;i<str.length;i++){
  131. if(str[i].equals(""))
  132. continue;
  133. char c = (char)Integer.parseInt(str[i].trim(),16);
  134. sb.append(c);
  135. }
  136. return sb.toString();
  137. }
  138. public static void main(String[] args) throws UnsupportedEncodingException {
  139. String str = "This is a 中文的 String!";
  140. System.out.println("str: " + str);
  141. String unicode = ChangeCharset.stringToUnicode(str);
  142. System.out.println("转换成unicode码: " + unicode);
  143. System.out.println(unicode.startsWith("\\u"));
  144. String unicodeTostr = ChangeCharset.unicodeToString(unicode);
  145. System.out.println("unicode转换成字符串: " + unicodeTostr);
  146. System.out.println();
  147. String gbk = ChangeCharset.toGBK(str);
  148. System.out.println("转换成GBK码: " + gbk);
  149. System.out.println();
  150. String ascii = ChangeCharset.toASCII(str);
  151. System.out.println("转换成US-ASCII码: " + ascii);
  152. gbk = ChangeCharset.changeCharset(ascii, ChangeCharset.US_ASCII,
  153. ChangeCharset.GBK);
  154. System.out.println("再把ASCII码的字符串转换成GBK码: " + gbk);
  155. System.out.println();
  156. String iso88591 = ChangeCharset.toISO_8859_1(str);
  157. System.out.println("转换成ISO-8859-1码: " + iso88591);
  158. gbk = ChangeCharset.changeCharset(iso88591, ChangeCharset.ISO_8859_1,
  159. ChangeCharset.GBK);
  160. System.out.println("再把ISO-8859-1码的字符串转换成GBK码: " + gbk);
  161. System.out.println();
  162. String utf8 = ChangeCharset.toUTF_8(str);
  163. System.out.println("转换成UTF-8码: " + utf8);
  164. gbk = ChangeCharset.changeCharset(utf8, ChangeCharset.UTF_8,
  165. ChangeCharset.GBK);
  166. System.out.println("再把UTF-8码的字符串转换成GBK码: " + gbk);
  167. System.out.println();
  168. String utf16be = ChangeCharset.toUTF_16BE(str);
  169. System.out.println("转换成UTF-16BE码:" + utf16be);
  170. gbk = ChangeCharset.changeCharset(utf16be, ChangeCharset.UTF_16BE,
  171. ChangeCharset.GBK);
  172. System.out.println("再把UTF-16BE码的字符串转换成GBK码: " + gbk);
  173. System.out.println();
  174. String utf16le = ChangeCharset.toUTF_16LE(str);
  175. System.out.println("转换成UTF-16LE码:" + utf16le);
  176. gbk = ChangeCharset.changeCharset(utf16le, ChangeCharset.UTF_16LE,
  177. ChangeCharset.GBK);
  178. System.out.println("再把UTF-16LE码的字符串转换成GBK码: " + gbk);
  179. System.out.println();
  180. String utf16 = ChangeCharset.toUTF_16(str);
  181. System.out.println("转换成UTF-16码:" + utf16);
  182. gbk = ChangeCharset.changeCharset(utf16, ChangeCharset.UTF_16LE,
  183. ChangeCharset.GBK);
  184. System.out.println("再把UTF-16码的字符串转换成GBK码: " + gbk);
  185. String s = new String("中文".getBytes("UTF-8"), "UTF-8");
  186. System.out.println(s);
  187. }
  188. }