直接需求是將漢字轉化為數字字母的組合,也就是編碼,將這個編碼結果進行存儲,
回顯時需要讀取上面這個編碼結果進行解碼,就可以轉換為被編碼的漢字了,
具體代碼如下,
其中:
str就是需要編碼的漢字字符串,
afterEncode是編碼結果,該編碼結果就可以去和其他非漢字數據一起存儲,
afterDecode是解碼結果,可以作為漢字顯示,
import java.io.ByteArrayOutputStream; import java.io.UnsupportedEncodingException; public class Encode { private static String hexString="0123456789ABCDEF"; public static void main(String[] args)throws UnsupportedEncodingException { String str = "維保日期"; System.out.println("待編碼字符:" + str); System.out.println("Encode:"); String afterEncode = encode(str, "GBK"); //中文轉換為16進制字符串 System.out.println("Encode Result:"+afterEncode); // System.out.println(afterEncode); System.out.println("Decode:"); String afterDecode = decode(afterEncode, "GBK"); System.out.println("Decode Result:"+afterDecode); } /** * 將字符串編碼成16進制數字,適用於所有字符(包括中文) */ public static String encode(String str, String charset) throws UnsupportedEncodingException { //根據默認編碼獲取字節數組 byte[] bytes=str.getBytes(charset); StringBuilder sb=new StringBuilder(bytes.length*2); //將字節數組中每個字節拆解成2位16進制整數 for(int i=0;i<bytes.length;i++){ sb.append(hexString.charAt((bytes[i]&0xf0)>>4)); sb.append(hexString.charAt((bytes[i]&0x0f)>>0)); } return sb.toString(); } /** * 將16進制數字解碼成字符串,適用於所有字符(包括中文) */ public static String decode(String bytes, String charset) throws UnsupportedEncodingException { ByteArrayOutputStream baos = new ByteArrayOutputStream(bytes.length()/2); //將每2位16進制整數組裝成一個字節 for(int i=0;i<bytes.length();i+=2) baos.write((hexString.indexOf(bytes.charAt(i))<<4 |hexString.indexOf(bytes.charAt(i+1)))); return new String(baos.toByteArray(), charset); } }
測試結果:
待編碼字符:維保日期
Encode:
Encode Result:CEACB1A3C8D5C6DA
Decode:
Decode Result:維保日期
