JAVA转化Unicode编码
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编码的更多相关文章
- Java与编码问题串讲之二–如何理解java采用Unicode编码
Java开发者必须牢记:在Java中字符仅以一种形式存在,那就是Unicode(不选择任何特定的编码,直接使用他们在字符集中的编号,这是统一的唯一方法).由于java采用unicode编码,char ...
- 如何理解java采用Unicode编码
http://blog.csdn.net/gjb724332682/article/details/43229563 Java中字符仅以一种形式存在,那就是Unicode.由于java采用unicod ...
- 在 Java 中将 Unicode 编码的汉字转码
今天在做一个新浪微博的抓取测试,发现抓取后的内容是Unicode编码的,完全找不到熟悉的汉字了,下面搜索出来的一种方法,完全可行,只是不知到Java内部是否提供了相关的类库. 实现方法如下: publ ...
- java测试Unicode编码以及数组的运用(初学篇)
/*第二章第四小题*/ /* * (1)编写一个应用程序,给出汉字“你” ,“我”,“他”在Unicode 表中的位置 * (2)编写一个java应用程序,输出全部的希腊字母 */ public cl ...
- java基础类型中的char和byte的辨析及Unicode编码和UTF-8的区别
在平常工作中使用到char和byte的场景不多,但是如果项目中使用到IO流操作时,则必定会涉及到这两个类型,下面让我们一起来回顾一下这两个类型吧. char和byte的对比 byte byte 字节, ...
- java字符编码-Unicode编码问题刨根究底
博客搬家: java字符编码问题 前段时间在读<java核心技术卷一>,遇到一些名词:码点.代码单元等,其实字面意思不难理解,解释如下 码点(code point):Unicode编码表中 ...
- java 中文转换成Unicode编码和Unicode编码转换成中文
转自:一叶飘舟 http://blog.csdn.net/jdsjlzx/article/details/ package lia.meetlucene; import java.io.IOExcep ...
- Java用native2ascii命令做unicode编码转换
背景:在做Java开发的时候,常常会出现一些乱码,或者无法正确识别或读取的文件,比如常见的validator验证用的消息资源(properties)文件就需要进行Unicode重新编码.原因是java ...
- Java Unicode编码 及 Mysql utf8 utf8mb3 utf8mb4 的区别与utf8mb4的过滤
UTF-8简介 UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,也是一种前缀码.它可以用来表示Unicode标准中的任何 ...
随机推荐
- 【算法导论C++代码】最大子数组
#define Inf 65535 #include <iostream> using namespace std; void FindMaxCrossingSubarray(int *A ...
- Django 工作流程
一.Django 工作流程 在开始具体的代码之旅前,先来宏观地看下Django是如何处理Http Resquest的,如下图: 假设你已经在浏览器输入了 http://127.0.0.1:8000/p ...
- Spark 开发环境搭建
原文见 http://xiguada.org/spark-develop/ 本文基于Spark 0.9.0,由于它基于Scala 2.10,因此必须安装Scala 2.10,否则将无法运行Spar ...
- 超棒的JS移动设备滑动内容幻灯实现 - Swiper
来源:GBin1.com 在线演示 如果你需要一款帮助你实现手机或者移动设备上内容幻灯实现的JS类库的话 , Swiper是一个不错的选择,它不依赖于任何第三方的类库.因此体积非常小,适合运行在移动设 ...
- Android Annotations浅析
这阵子遇到了好多事情,挺久没来更新博文了,这两天在学这个开源框架Android Annotations,用起来感觉挺方便的, 相信用过Spring注解的孩子理解起来应该比較easy! 就是配置起来比較 ...
- freemarker的list指令小技术归纳
1.问题:当数据超过3位的时候,freemarker会自动用逗号截取,例如2,311 解决方法(一种即可): (1)加.toString(),如:${(data).toString()} (2)加?c ...
- [服务器安全]升级OpenSSH,OpenSSL,vsftp,关闭NTP服务
公司的旧版直播服务器使用的是CentOS 6.7,很多软件包都是几年前的了.最近很多安全相关的新闻充斥着IT圈,先是Intel芯片有重大安全漏洞,后面MacOS爆安全漏洞.所以,对于安全问题还真不能小 ...
- vscode Gitlens插件 查看代码提交
GitLens
- 禁止 git 自动转换换行符
开发团队都在 windows 下开发,有IDE管理代码.对我们来说,最好是禁用换行转换符的功能.我用 cygwin 提交代码,提交时总提示自动转换换符.其实都不用提交,仅运行 git status 看 ...
- JDBC2.0操作:结果集,更新,插入,删除,批处理语句
JDBC对ResultSet的支持 JDBC最重要的概念是批处理,可以一次完成多个语句的执行. 可滚动的结果集. 如果想创建可滚动的结果集,则在创建PrepareStatement时候必须指定创建的类 ...