Java实现中文字符串与unicode互转工具类

 更新时间:2019年04月22日 11:05:39   作者:hkhhkb  
这篇文章主要为大家详细介绍了Java实现中文字符串与unicode互转的工具类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Java实现中文字符串与unicode互转的具体代码,供大家参考,具体内容如下

原理利用了java实现js的escape以及unescape函数。

/**
 * 中文字符串和unicode互转工具类 <br>
 * 
 * @author hkb <br>
 */
public class UnicodeConvertUtils {

  /**
   * 实现js的escape函数
   * 
   * @param input
   *      待传入字符串
   * @return
   */
  public static String escape(String input) {
    int len = input.length();
    int i;
    char j;
    StringBuffer result = new StringBuffer();
    result.ensureCapacity(len * 6);
    for (i = 0; i < len; i++) {
      j = input.charAt(i);
      if (Character.isDigit(j) || Character.isLowerCase(j) || Character.isUpperCase(j)) {
        result.append(j);
      } else if (j < 256) {
        result.append("%");
        if (j < 16) {
          result.append("0");
        }
        result.append(Integer.toString(j, 16));
      } else {
        result.append("%u");
        result.append(Integer.toString(j, 16));
      }
    }
    return result.toString();

  }

  /**
   * 实现js的unescape函数
   * 
   * @param input
   *      待传入字符串
   * @return
   */
  public static String unescape(String input) {
    int len = input.length();
    StringBuffer result = new StringBuffer();
    result.ensureCapacity(len);
    int lastPos = 0, pos = 0;
    char ch;
    while (lastPos < len) {
      pos = input.indexOf("%", lastPos);
      if (pos == lastPos) {
        if (input.charAt(pos + 1) == 'u') {
          ch = (char) Integer.parseInt(input.substring(pos + 2, pos + 6), 16);
          result.append(ch);
          lastPos = pos + 6;
        } else {
          ch = (char) Integer.parseInt(input.substring(pos + 1, pos + 3), 16);
          result.append(ch);
          lastPos = pos + 3;
        }
      } else {
        if (pos == -1) {
          result.append(input.substring(lastPos));
          lastPos = len;
        } else {
          result.append(input.substring(lastPos, pos));
          lastPos = pos;
        }
      }
    }
    return result.toString();
  }

  /**
   * unicode转中文
   * 
   * @param input
   *      待传入字符串
   * @return
   */
  public static String toGb2312(String input) {
    input = input.trim().replaceAll("(?i)\\\\u", "%u");
    return unescape(input);
  }

  /**
   * 中文字符串转unicode
   * 
   * @param input
   *      待传入字符串
   * @return
   */
  public static String toUnicode(String input) {
    input = input.trim();
    String output = escape(input).toLowerCase().replace("%u", "\\u");
    return output.replaceAll("(?i)%7b", "{").replaceAll("(?i)%7d", "}").replaceAll("(?i)%3a", ":")
        .replaceAll("(?i)%2c", ",").replaceAll("(?i)%27", "'").replaceAll("(?i)%22", "\"")
        .replaceAll("(?i)%5b", "[").replaceAll("(?i)%5d", "]").replaceAll("(?i)%3D", "=")
        .replaceAll("(?i)%20", " ").replaceAll("(?i)%3E", ">").replaceAll("(?i)%3C", "<")
        .replaceAll("(?i)%3F", "?").replaceAll("(?i)%5c", "\\");
  }

  /**
   * 测试
   * 
   * @param args
   */
  public static void main(String[] args) {
    System.out.println(toUnicode("你好"));
    System.out.println(toGb2312("\u4f60\u597d"));
    // 等同于上面
    System.out.println(toGb2312("\\u4f60\\u597d"));
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Spring Boot请求处理之常用参数注解使用教程

    Spring Boot请求处理之常用参数注解使用教程

    这篇文章主要给大家介绍了关于Spring Boot请求处理之常用参数注解使用的相关资料,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-03-03
  • 浅谈JAVA在项目中如何自定义异常

    浅谈JAVA在项目中如何自定义异常

    今天给大家带来的是关于Java的相关知识,文章围绕着JAVA在项目中如何自定义异常展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • 浅谈Java自定义类加载器及JVM自带的类加载器之间的交互关系

    浅谈Java自定义类加载器及JVM自带的类加载器之间的交互关系

    这篇文章主要介绍了浅谈Java自定义类加载器及JVM自带的类加载器之间的交互关系,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • 一文带你弄清Map集合及其实现类

    一文带你弄清Map集合及其实现类

    在Java中,Map是一种键值对(Key-Value)的集合,它存储了一组唯一的键与相应的值,每个键可以映射到一个值,这篇文章将详细介绍Map集合及其一些常见的实现类,适合小白,感兴趣的同学可以参考阅读
    2023-06-06
  • 基于jenkins上配置Credentials的2种方式

    基于jenkins上配置Credentials的2种方式

    这篇文章主要介绍了基于jenkins上配置Credentials的2种方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Java并发编程中的ReentrantLock类详解

    Java并发编程中的ReentrantLock类详解

    这篇文章主要介绍了Java并发编程中的ReentrantLock类详解,ReentrantLock是juc.locks包中的一个独占式可重入锁,相比synchronized,它可以创建多个条件等待队列,还支持公平/非公平锁、可中断、超时、轮询等特性,需要的朋友可以参考下
    2023-12-12
  • Java异常类型及处理

    Java异常类型及处理

    这篇文章主要介绍了Java异常出现原因,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-07-07
  • java题解LeetCode20.有效的括号

    java题解LeetCode20.有效的括号

    这篇文章主要为大家介绍了java题解LeetCode20.有效的括号示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • java面向对象继承与多态介绍

    java面向对象继承与多态介绍

    大家好,本篇文章主要讲的是java面向对象继承与多态介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • java泛型基本知识及通用方法

    java泛型基本知识及通用方法

    这篇文章主要介绍了java泛型基础知识及通用方法,从以下几个方面介绍一下java的泛型: 基础, 泛型关键字, 泛型方法, 泛型类和接口,感兴趣的可以了解一下
    2019-04-04

最新评论