java 漢字與數字字母的編碼與解碼


直接需求是將漢字轉化為數字字母的組合,也就是編碼,將這個編碼結果進行存儲,

回顯時需要讀取上面這個編碼結果進行解碼,就可以轉換為被編碼的漢字了,

具體代碼如下,

其中:

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:維保日期

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM