package yyl.example.basic.codec;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern; public class UnicodeUtil { //编码
public static String encode(String string) {
StringBuilder sbr = new StringBuilder(string.length() * 4);
for (char ch : string.toCharArray()) {
if (ch > 0xfff) {
sbr.append("\\u");
sbr.append(Integer.toHexString(ch).toUpperCase(Locale.ENGLISH));
} else if (ch > 0xff) {
sbr.append("\\u0");
sbr.append(Integer.toHexString(ch).toUpperCase(Locale.ENGLISH));
} else if (ch > 0x7f) {
sbr.append("\\u00");
sbr.append(Integer.toHexString(ch).toUpperCase(Locale.ENGLISH));
} else if (ch < 32) {
switch (ch) {
case '\b':
sbr.append('\\');
sbr.append('b');
break;
case '\n':
sbr.append('\\');
sbr.append('n');
break;
case '\t':
sbr.append('\\');
sbr.append('t');
break;
case '\f':
sbr.append('\\');
sbr.append('f');
break;
case '\r':
sbr.append('\\');
sbr.append('r');
break;
default:
if (ch > 0xf) {
sbr.append("\\u00");
sbr.append(Integer.toHexString(ch).toUpperCase(Locale.ENGLISH));
} else {
sbr.append("\\u000");
sbr.append(Integer.toHexString(ch).toUpperCase(Locale.ENGLISH));
}
break;
}
} else {
switch (ch) {
case '\'':
sbr.append("\\u0027");
break;
case '"':
case '\\':
sbr.append("\\");
sbr.append(ch);
break;
default:
sbr.append(ch);
break;
}
}
}
return sbr.toString();
} //解码
public static String decode(String unicode) {
char[] chars = unicode.toCharArray();
StringBuilder buffer = new StringBuilder();
for (int i = 0, len = chars.length; i < len;) {
char c = chars[i++];
switch (c) {
case 0:
case '\n':
case '\r':
break;
case '\\':
c = chars[i++];
switch (c) {
case 'b':
buffer.append('\b');
break;
case 't':
buffer.append('\t');
break;
case 'n':
buffer.append('\n');
break;
case 'f':
buffer.append('\f');
break;
case 'r':
buffer.append('\r');
break;
case 'u':
buffer.append((char) Integer.parseInt(new String(new char[] {//
chars[i++], chars[i++], chars[i++], chars[i++] //
}), 16));//
break;
case 'x':
buffer.append((char) Integer.parseInt(new String(new char[] {//
chars[i++], chars[i++] //
}), 16));//
break;
default:
buffer.append(c);
}
break;
default:
buffer.append(c);
}
}
return buffer.toString();
} /**
* 方法2
* @param unicodeStr
* @return
*/
public static String unicodeToString(String unicodeStr) {
Pattern pattern = Pattern.compile("(\\\\u(\\p{XDigit}{4}))");
Matcher matcher = pattern.matcher(unicodeStr);
char ch;
while (matcher.find()) {
ch = (char) Integer.parseInt(matcher.group(2), 16);
unicodeStr = unicodeStr.replace(matcher.group(1), ch + "");
}
return unicodeStr;
} public static void main(String[] args) {
String unicode = encode("你好Unicode");
System.out.println(unicode); StringBuilder sbr = new StringBuilder();
for (int i = 0; i < 1000; i++) {
sbr.append(unicode);
}
unicode = sbr.toString(); //System.out.println(decode(unicode));
long l = System.currentTimeMillis(); for (int i = 0; i < 10000; i++) {
decode(unicode);
//unicodeToString(unicode);
}
System.out.println(System.currentTimeMillis() - l);
}
}

JAVA转化Unicode编码的更多相关文章

  1. Java与编码问题串讲之二–如何理解java采用Unicode编码

    Java开发者必须牢记:在Java中字符仅以一种形式存在,那就是Unicode(不选择任何特定的编码,直接使用他们在字符集中的编号,这是统一的唯一方法).由于java采用unicode编码,char  ...

  2. 如何理解java采用Unicode编码

    http://blog.csdn.net/gjb724332682/article/details/43229563 Java中字符仅以一种形式存在,那就是Unicode.由于java采用unicod ...

  3. 在 Java 中将 Unicode 编码的汉字转码

    今天在做一个新浪微博的抓取测试,发现抓取后的内容是Unicode编码的,完全找不到熟悉的汉字了,下面搜索出来的一种方法,完全可行,只是不知到Java内部是否提供了相关的类库. 实现方法如下: publ ...

  4. java测试Unicode编码以及数组的运用(初学篇)

    /*第二章第四小题*/ /* * (1)编写一个应用程序,给出汉字“你” ,“我”,“他”在Unicode 表中的位置 * (2)编写一个java应用程序,输出全部的希腊字母 */ public cl ...

  5. java基础类型中的char和byte的辨析及Unicode编码和UTF-8的区别

    在平常工作中使用到char和byte的场景不多,但是如果项目中使用到IO流操作时,则必定会涉及到这两个类型,下面让我们一起来回顾一下这两个类型吧. char和byte的对比 byte byte 字节, ...

  6. java字符编码-Unicode编码问题刨根究底

    博客搬家: java字符编码问题 前段时间在读<java核心技术卷一>,遇到一些名词:码点.代码单元等,其实字面意思不难理解,解释如下 码点(code point):Unicode编码表中 ...

  7. java 中文转换成Unicode编码和Unicode编码转换成中文

    转自:一叶飘舟 http://blog.csdn.net/jdsjlzx/article/details/ package lia.meetlucene; import java.io.IOExcep ...

  8. Java用native2ascii命令做unicode编码转换

    背景:在做Java开发的时候,常常会出现一些乱码,或者无法正确识别或读取的文件,比如常见的validator验证用的消息资源(properties)文件就需要进行Unicode重新编码.原因是java ...

  9. Java Unicode编码 及 Mysql utf8 utf8mb3 utf8mb4 的区别与utf8mb4的过滤

    UTF-8简介 UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,也是一种前缀码.它可以用来表示Unicode标准中的任何 ...

随机推荐

  1. Git系列六之标签管理

    1.Git标签管理 当版本仓库内的数据有个大的改善或者功能更新,我们经常会打一个类似于软件版本号的标签,这样通过标签就可以将版本库中的某个历史版本给记录下来,方便我们随时将特定历史时期的数据取出来用, ...

  2. 远程操作linux

    import java.io.IOException;import java.io.InputStream;import org.apache.commons.io.IOUtils; import c ...

  3. Android NDK 交叉编译C++代码生成.so共享库详细步骤

    Android NDK 交叉编译C++代码生成.so共享库详细步骤 Android NDK 调用c++ stl 模板库(修改android.mk文件) 1  在需要调用模板库的文件前包含头文件:   ...

  4. js中,“\”转义字符的使用

    (1)针对双引号“”的使用: html= "<a href=\"javascript:void(0)\" onclick=\"getSubContent( ...

  5. iOS 证书管理.p12文件不能导出

    iOS证书不能导出p12文件: 首先要确认证书是从你这个电脑上制作生成的! 钥匙串-->我的证书--->右键,就可以导出了!

  6. vue - webpack.dev.conf.js for merge

    webpack-merge提供了一个merge连接数组并合并创建新对象的对象的函数.如果遇到函数,它将执行它们,通过算法运行结果,然后再次将返回的值包装在函数中. 这种行为在配置webpack时特别有 ...

  7. [Unity3D]场景间切换与数据传递(以及物体删除技巧)

    http://blog.163.com/kingmax_res/blog/static/77282442201031712216508/ 先介绍一些基本函数(具体用法自己查文档):---------- ...

  8. cookie存中文

    cookie存取: 存: Cookie cookie = new Cookie("title",URLEncoder.encode("标题","utf ...

  9. PHP拿到别人项目如何修改为自己

    以下为借助google翻译的,个人润色了一下,官方版里面感觉有很多问题,我这里有我个人修改大部分问题的版本,包括翻译完善,有需要的可以联系我:qyj8411@163.com 1. 在您网站的根目录创建 ...

  10. Ffmpeg 视频教程 向视频中添加文字

    Ffmpeg支持添加文字功能,具体如何将文字叠加到视频中的每一张图片,FFmpeg调用了文字库FreeSerif.ttf.当我们 用到ffmpeg 添加文字功能时 我们需要先下载改文字库,下载地址是h ...