UTF和GBK互转

不说了直接上代码:

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

测试情况见:  http://www.oschina.net/question/219762_212483

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

UTF和GBK互转 - HelloWorld