zoukankan      html  css  js  c++  java
  • java 中文与unicode互转

    public class FontUtil {
    
        public static void main(String[] args) {
            System.out.println(chinaToUnicode("未登陆!"));
            System.out.println(decodeUnicode("u672au767bu9646uff01"));
        }
        
         /** 
         * 把中文转成Unicode码 
         *  
         * @param str 
         * @return 
         */  
        public static String chinaToUnicode(String str) {  
            String result = "";  
            for (int i = 0; i < str.length(); i++) {  
                int chr1 = (char) str.charAt(i);  
                if (chr1 >= 19968 && chr1 <= 171941) {// 汉字范围 u4e00-u9fa5 (中文)  
                    result += "\u" + Integer.toHexString(chr1);  
                } else {  
                    result += str.charAt(i);  
                }  
            }  
            return result;  
        }  
      
        /** 
         * 判断是否为中文字符 
         *  
         * @param c 
         * @return 
         */  
        public static boolean isChinese(char c) {  
            Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);  
            if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS  
                    || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS  
                    || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A  
                    || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION  
                    || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION  
                    || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) {  
                return true;  
            }  
            return false;  
        }  
        
        
        //Unicode转中文  
        public static String decodeUnicode(final String unicode) {     
             StringBuffer string = new StringBuffer();  
             
             String[] hex = unicode.split("\\u");  
       
             for (int i = 0; i < hex.length; i++) {  
                   
                 try {  
                     // 汉字范围 u4e00-u9fa5 (中文)  
                     if(hex[i].length()>=4){//取前四个,判断是否是汉字  
                         String chinese = hex[i].substring(0, 4);  
                         try {  
                             int chr = Integer.parseInt(chinese, 16);  
                             boolean isChinese = isChinese((char) chr);  
                             //转化成功,判断是否在  汉字范围内  
                             if (isChinese){//在汉字范围内  
                                 // 追加成string  
                                 string.append((char) chr);  
                                 //并且追加  后面的字符  
                                 String behindString = hex[i].substring(4);  
                                 string.append(behindString);  
                             }else {  
                                 string.append(hex[i]);  
                             }  
                         } catch (NumberFormatException e1) {  
                             string.append(hex[i]);  
                         }  
                           
                     }else{  
                         string.append(hex[i]);  
                     }  
                 } catch (NumberFormatException e) {  
                     string.append(hex[i]);  
                 }  
             }  
       
             return string.toString();  
        }  
        
    }
  • 相关阅读:
    hdu 3342 Legal or Not 拓排序
    hdu 1596 find the safest road Dijkstra
    hdu 1874 畅通工程续 Dijkstra
    poj 2676 sudoku dfs
    poj 2251 BFS
    poj Prime Path BFS
    poj 3278 BFS
    poj 2387 Dijkstra 模板
    poj 3083 DFS 和BFS
    poj 1062 昂贵的聘礼 dijkstra
  • 原文地址:https://www.cnblogs.com/shihaiming/p/9089904.html
Copyright © 2011-2022 走看看