java 汉字与UTF-8十六进制编码 间相互转换方法

时间:2023-01-05 20:11:42

解决了困扰了很久的问题。才疏学浅,留个记忆。

从jni收到char[]类型数据,中文乱码

char[]   obj.data 


String str = String.copyValueOf(obj.data)  ;

String[] _Info =str.split(",");

for(int i=0,i<_Info .length , i++)

 alias=alias+Integer.toHexString((int)_Info [1].charAt(i));

 接下去用下面的方法就行


原文:http://blog.csdn.net/top_code/article/details/8450423


最近项目中需要把中文转换为UTF-8编码,并且还能将转换后的UTF-8编码转换为原来的中文,比如 上海 转换为UTF-8编码为 E4B88AE6B5B7,

Google了不少时间,然后参考 JDK源码 实现了上述功能

代码如下:


[java]  view plain  copy
  1. /** 
  2.      * UTF-8编码 转换为对应的 汉字 
  3.      *  
  4.      * URLEncoder.encode("上海", "UTF-8") ---> %E4%B8%8A%E6%B5%B7 
  5.      * URLDecoder.decode("%E4%B8%8A%E6%B5%B7", "UTF-8") --> 上 海 
  6.      *  
  7.      * convertUTF8ToString("E4B88AE6B5B7") 
  8.      * E4B88AE6B5B7 --> 上海 
  9.      *  
  10.      * @param s 
  11.      * @return 
  12.      */  
  13.     public static String convertUTF8ToString(String s) {  
  14.         if (s == null || s.equals("")) {  
  15.             return null;  
  16.         }  
  17.           
  18.         try {  
  19.             s = s.toUpperCase();  
  20.   
  21.             int total = s.length() / 2;  
  22.             int pos = 0;  
  23.   
  24.             byte[] buffer = new byte[total];  
  25.             for (int i = 0; i < total; i++) {  
  26.   
  27.                 int start = i * 2;  
  28.   
  29.                 buffer[i] = (byte) Integer.parseInt(  
  30.                         s.substring(start, start + 2), 16);  
  31.                 pos++;  
  32.             }  
  33.   
  34.             return new String(buffer, 0, pos, "UTF-8");  
  35.               
  36.         } catch (UnsupportedEncodingException e) {  
  37.             e.printStackTrace();  
  38.         }  
  39.         return s;  
  40.     }  
  41.   
  42.     /** 
  43.      * 将文件名中的汉字转为UTF8编码的串,以便下载时能正确显示另存的文件名. 
  44.      *  
  45.      * @param s 原串 
  46.      * @return 
  47.      */  
  48.     public static String convertStringToUTF8(String s) {  
  49.         if (s == null || s.equals("")) {  
  50.             return null;  
  51.         }  
  52.         StringBuffer sb = new StringBuffer();  
  53.         try {  
  54.             char c;  
  55.             for (int i = 0; i < s.length(); i++) {  
  56.                 c = s.charAt(i);  
  57.                 if (c >= 0 && c <= 255) {  
  58.                     sb.append(c);  
  59.                 } else {  
  60.                     byte[] b;  
  61.   
  62.                     b = Character.toString(c).getBytes("utf-8");  
  63.   
  64.                     for (int j = 0; j < b.length; j++) {  
  65.                         int k = b[j];  
  66.                         if (k < 0)  
  67.                             k += 256;  
  68.                         sb.append(Integer.toHexString(k).toUpperCase());  
  69.                         // sb.append("%" +Integer.toHexString(k).toUpperCase());  
  70.                     }  
  71.                 }  
  72.             }  
  73.         } catch (Exception e) {  
  74.             e.printStackTrace();  
  75.   
  76.         }  
  77.         return sb.toString();  
  78.     }