首先,这是我在项目中遇到的两种unicode格式,
第一种较为常见,第二种是首次遇到,

// 磷叶石.–<宝石之国>
String unicode = “\u78f7\u53f6\u77f3”;
String unicode2 = “磷叶石”;

如果是第一种的话,可采用以下这种方式解码:

 public static String decode(String unicodeStr) {        if (unicodeStr == null) {            return null;        }        StringBuffer retBuf = new StringBuffer();        int maxLoop = unicodeStr.length();        for (int i = 0; i < maxLoop; i++) {            if (unicodeStr.charAt(i) == '\\') {                if ((i < maxLoop - 5) && ((unicodeStr.charAt(i + 1) == 'u') || (unicodeStr.charAt(i + 1) == 'U')))                    try {                        retBuf.append((char) Integer.parseInt(unicodeStr.substring(i + 2, i + 6), 16));                        i += 5;                    } catch (NumberFormatException localNumberFormatException) {                        retBuf.append(unicodeStr.charAt(i));                    }                else                    retBuf.append(unicodeStr.charAt(i));            } else {                retBuf.append(unicodeStr.charAt(i));            }        }        return retBuf.toString();    }

(原文地址:http://blog.csdn.net/zimo2013/article/details/40780439)
第二种的话,

public static String decode2(String unicodeStr) {        if (unicodeStr == null) {            return null;        }        StringBuffer stringBuffer = new StringBuffer();        int maxLoop = unicodeStr.length();        for (int i = 0; i < maxLoop; i++) {            if (unicodeStr.charAt(i) == '&' && unicodeStr.charAt(i + 1) == '#') {                int endNode = -1; // 结束节点.                for (int j = i + 2; j < i + 10; j++) {                    if (unicodeStr.charAt(j) == ';') {                        endNode = j;                        break;                    }                }                if (endNode != -1) {                    char c = (char) Integer.parseInt(unicodeStr.substring(i + 2, endNode), 10);                    stringBuffer.append(c);                    i = endNode;                }            }        }        return stringBuffer.toString();    }

总结,仔细观察可发现,两种的区别无非是16进制vs10进制,原理相同,一通百通.
原理就是这两句了:

char c = (char) Integer.parseInt(unicodeStr.substring(i + 2, i + 6), 16)
char c = (char) Integer.parseInt(unicodeStr.substring(i + 2, endNode), 10);

unicode编码,根据进制parse为int,再强转为char即为对应的字符.

更多相关文章

  1. 终结篇:Android(安卓)startActivity原理分析(基于Android(安卓)8.
  2. Android(安卓)studio使用zxing扫一扫
  3. 微信自动回复和自动抢红包实现原理(一):AccessibilityService的介绍
  4. android BitmapFactory的内存溢出
  5. MTK Android(安卓)G sensor 原理,配置,调试
  6. Android(安卓)屏幕分辨率适配原理
  7. android分包原理--MultiDex
  8. Android(安卓)Studio 解析XML的三种方法
  9. Android中使用MediaCodec硬件解码,高效率得到YUV格式帧

随机推荐

  1. Android Studio Settings Repository Plu
  2. 第3.1.4节 理解任务与返回堆栈
  3. Android中的设计模式(结合大话设计模式+
  4. Android出现java.net.SocketException: P
  5. android 屏蔽证书验证 CertPathValidator
  6. Qt Ubuntu 配置 Android 环境变量
  7. Android Appium源码分析
  8. Android培训班(49)
  9. Q版疯狂大炮游戏android源码下载
  10. undefined reference to '__android_log_