Java实现字符与Unicode互转

769次浏览

Java实现字符与Unicode互转,有两个主要方法:

Integer.toHexString();//转码
Integer.parseInt();//解码

通过以上两个方法实现对字符的转码与解码。


代码如下:

public class Test{
    
    public static void main(String[] args) {
        
        String str = "李锋镝的个人博客http://www.lifengdi.com";
//        String str = "假装这里有Emoji表情";
//        unicode(str);
        System.out.println("decodeUnicode:"+decodeUnicode(unicode(str)));
        System.out.println("decodeUnicode2:"+decodeUnicode2(unicode(str)));
    }
    
    public static String unicode(String source){
        StringBuffer sb = new StringBuffer();
        char [] source_char = source.toCharArray();
        String unicode = null;
        for (int i=0;i<source_char.length;i++) {
            unicode = Integer.toHexString(source_char[i]);
            if (unicode.length() <= 2) {
                unicode = "00" + unicode;
            }
            sb.append("\\u" + unicode);
        }
        System.out.println(sb);
        return sb.toString();
    }
    
    public static String decodeUnicode(String unicode) {     
        StringBuffer sb = new StringBuffer();
         
        String[] hex = unicode.split("\\\\u");
     
        for (int i = 1; i < hex.length; i++) {
            int data = Integer.parseInt(hex[i], 16);
            sb.append((char) data);
        }
        return sb.toString();  
     } 
    
    public static String decodeUnicode2(String dataStr) {     
        int start = 0;     
        int end = 0;     
        final StringBuffer buffer = new StringBuffer();     
        while (start > -1) {     
            end = dataStr.indexOf("\\u", start + 2);     
            String charStr = null;     
            if (end == -1) {     
                charStr = dataStr.substring(start + 2, dataStr.length());     
            } else {     
                charStr = dataStr.substring(start + 2, end);     
            }     
            char letter = (char) Integer.parseInt(charStr, 16);   
            buffer.append(new Character(letter).toString());     
            start = end;     
        }     
        return buffer.toString();     
     } 

}

运行结果如下:

\u674e\u950b\u955d\u7684\u4e2a\u4eba\u535a\u5ba2\u0068\u0074\u0074\u0070\u003a\u002f\u002f\u0077\u0077\u0077\u002e\u006c\u0069\u0066\u0065\u006e\u0067\u0064\u0069\u002e\u0063\u006f\u006d
decodeUnicode:李锋镝的个人博客http://www.lifengdi.com
\u674e\u950b\u955d\u7684\u4e2a\u4eba\u535a\u5ba2\u0068\u0074\u0074\u0070\u003a\u002f\u002f\u0077\u0077\u0077\u002e\u006c\u0069\u0066\u0065\u006e\u0067\u0064\u0069\u002e\u0063\u006f\u006d
decodeUnicode2:李锋镝的个人博客http://www.lifengdi.com

如果是Emoji表情,同样可以进行互转,有兴趣的同学可以试试。

Tags: Java Unicode

如果您觉得本文对您的学习或工作有所帮助,您可以打开支付宝,对我的博客进行赞助:
我的支付宝
如果您觉得仍有疑问 OR 发现我的博客中有不正确或侵权的内容,您可以打开手机QQ扫描下面的二维码,联系我本人(备注请注明来自博客):
我的QQ