字符串的编码格式:

String hex="\u5df2\u5b9e\u540d\u5236";// 十六进制

String dec = "全球通";//十进制
String s="已实名制";//字符串

相互转换的代码

1.十进制转unicode编码

public static String decToHex(String s){
String[] ds=s.split(";");
StringBuffer sbf=new StringBuffer();
for(int i=0;i<ds.length;i++){
if(ds[i].startsWith("&#")){
Integer tem=Integer.parseInt(ds[i].replace("&#", ""));
sbf.append("\\u").append(Integer.toHexString(tem));
} }
return sbf.toString();
}

2.unicode转char数组

/**
* unicode 转字符数组
*/
public static char[] unicode2Chars(String unicode) { StringBuffer string = new StringBuffer(); String[] hex = unicode.split("\\\\u"); char[] cs=new char[hex.length]; for (int i = 1; i < hex.length; i++) { // 转换出每一个代码点
int data = Integer.parseInt(hex[i], 16);
cs[i]=(char) data;
} return cs;
}

3.汉字转unicode

/**
*
* @param 汉字
* @return unicode编码
*/
public static String toUnicode(String s) {
String as[] = new String[s.length()];
String s1 = "";
for (int i = 0; i < s.length(); i++) {
as[i] = Integer.toHexString(s.charAt(i) & 0xffff);
s1 = s1 + "\\u" + as[i];
}
return s1;
}

utf-8

utf-8格式的中文由三位字节组成。

UTF-8的编码规则很简单,只有二条:
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。
下表总结了编码规则,字母x表示可用编码的位。
Unicode符号范围 | UTF-8编码方式
(十六进制) | (二进制)
--------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

1.中文转unicode

    public static String toUnicode(String s) {
String as[] = new String[s.length()];
String s1 = "";
for (int i = 0; i < s.length(); i++) {
as[i] = Integer.toHexString(s.charAt(i) & 0xffff);
s1 = s1 + "\\u" + as[i];
}
return s1;
}

2.中文转bytes

byte[] b=s.getBytes("utf-8");

3. unicode转utf-8

/*
* unicode转到utf-8的转换过程。
* @param 要进行转换的汉字
* @return 16进制表示的汉字UTF-8编码字节序列 /
*/
public static String unicode2utf8(char input){
//1 Byte=8byte 16位取值范围00~ff
//input 两个字节 16位取值范围为4E00~9FA5
int lowByte = input & 0x00ff;
int highByte = (input & 0xff00) >>> 8; // UTF-8的第1个字节是1110 + highByte高4位
int high4inHighByte = (highByte& 0xf0) >>> 4;
int utf8Byte1 = (7 << 5) + high4inHighByte; // UTF-8的第2个字节是10 + highByte低4位 + lowByte高2位
int low4inHighByte = highByte & 0x0f;
int high2inLowByte = (lowByte& 0xc0) >>> 6;
int utf8Byte2 = (1 << 7) + (low4inHighByte << 2) + high2inLowByte; // UTF-8的第3个字节是10 + lowByte低6位
int utf8Byte3 = (1 << 7) + (lowByte & 0x3f);
String result = Integer.toHexString(utf8Byte1) + "," + Integer.toHexString(utf8Byte2) + ","
+ Integer.toHexString(utf8Byte3);
return result;
}

gbk

GBK编码,是对GB2312编码的扩展,因此完全兼容GB2312-80标准。GBK编码依然采用双字节编码方案,其编码范围:8140-FEFE,剔除xx7F码位,共23940个码位。共收录汉字和图形符号21886个,其中汉字(包括部首和构件)21003个,图形符号883个。GBK编码支持国际标准ISO/IEC10646-1和国家标准GB13000-1中的全部中日韩汉字,并包含了BIG5编码中的所有汉字。GBK编码方案于1995年12月15日正式发布,这一版的GBK规范为1.0版。

GBK 亦采用双字节表示,总体编码范围为 8140-FEFE,首字节在 81-FE 之间,尾字节在 40-FE 之间,剔除 xx7F 一条线。总计 23940 个码位,共收入 21886 个汉字和图形符号,其中汉字(包括部首和构件)21003 个,图形符号 883 个。

全部编码分为三大部分:

1. 汉字区。包括:
a. GB 2312 汉字区。即 GBK/2: B0A1-F7FE。收录 GB 2312 汉字 6763 个,按原顺序排列。
b. GB 13000.1 扩充汉字区。包括:
(1) GBK/3: 8140-A0FE。收录 GB 13000.1 中的 CJK 汉字 6080 个。
(2) GBK/4: AA40-FEA0。收录 CJK 汉字和增补的汉字 8160 个。CJK 汉字在前,按 UCS 代码大小排列;增补的汉字(包括部首和构件)在后,按《康熙字典》的页码/字位排列。
(3) 汉字“〇”安排在图形符号区GBK/5:A996。

2. 图形符号区。包括:
a. GB 2312 非汉字符号区。即 GBK/1: A1A1-A9FE。其中除 GB 2312 的符号外,还有 10 个小写罗马数字和 GB 12345 增补的符号。计符号 717 个。
b. GB 13000.1 扩充非汉字区。即 GBK/5: A840-A9A0。BIG-5 非汉字符号、结构符和“〇”排列在此区。计符号 166 个。

3. 用户自定义区:分为(1)(2)(3)三个小区。
(1) AAA1-AFFE,码位 564 个。
(2) F8A1-FEFE,码位 658 个。
(3) A140-A7A0,码位 672 个。
第(3)区尽管对用户开放,但限制使用,因为不排除未来在此区域增补新字符的可能性。

举例:

        String s="中文";
byte[] b=s.getBytes("gbk");

bytes为

[-42, -48, -50, -60]

补码为:

【214,208,206,196】

转换为十六进展为

【D6,D0,CE,C4】

按照gbk表去查询汉字

编码完全匹配。

中文转unicode,中文转bytes,unicode转bytes java实现的更多相关文章

  1. scrapy相关 通过设置 FEED_EXPORT_ENCODING 解决 unicode 中文写入json文件出现`\uXXXX`

    0.问题现象 爬取 item: 2017-10-16 18:17:33 [scrapy.core.scraper] DEBUG: Scraped from <200 https://www.hu ...

  2. Python2.X如何将Unicode中文字符串转换成 string字符串

    Python2.X如何将Unicode中文字符串转换成 string字符串   普通字符串可以用多种方式编码成Unicode字符串,具体要看你究竟选择了哪种编码:unicodestring = u&q ...

  3. charCodeAt方法以及Unicode中文汉字编码范围

    js的charCodeAt() 方法可返回指定位置的字符的 Unicode 编码.这个返回值是 0 - 65535 之间的整数. 在字符串 "Hello world!" 中,我们将 ...

  4. 正则表达式: javascript Unicode 中文字符 编码区间:\u4e00-\u9fa5

    正则表达式: javascript Unicode 中文字符  编码区间:\u4e00-\u9fa5 RegExp 对象 javascript Unicode 中文字符的 编码区间: \u4e00-\ ...

  5. paip.判断字符是否中文与以及判读是否是汉字uapi python java php

    paip.判断字符是否中文与以及判读是否是汉字uapi python java php   ##判断中文的原理 注意: 中文与汉字CJKV 的区别..日本,韩国,新加坡,古越南等国家也用汉字,但不是中 ...

  6. Java 中文字符判断 中文标点符号判断

    Java Character 实现Unicode字符集介绍  CJK中文字符和中文标点判断 主要内容: 1. Java Character类介绍: 2. Unicode 简介及 UnicodeBloc ...

  7. Windows下Python中的中文路径和中文输出问题

    这几天有个项目需要写一点类似于脚本的小程序,就用Python写了,涉及到中文路径和中文输出的问题,整理一下. 有一个问题我觉得需要先强调一下,在写Python程序的时候,一定保证编码是utf-8,然后 ...

  8. Unicode字符串和非Unicode字符串

    什么是Unicode? Unicode(统一码.万国码.单一码)是计算机科学领域里的一项业界标准,包括字符集.编码方案等.Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每 ...

  9. Android Studio中文组(中文社区)

    Android Studio中文组(中文社区)http://www.android-studio.org/

  10. 让Tomcat支持中文路径名和中文文件名

    http://hdwangyi.iteye.com/blog/107709 Tomcat是Java开发者使用得较多的一个Web服务器,因为它占用资源小,运行速度快等特点,深受Java Web程序员的喜 ...

随机推荐

  1. OpenPop.NET

    OpenPop用于接收邮件,可以读取邮件内容或者邮件附件内容导入到系统中 http://hpop.sourceforge.net/documentation/index.html

  2. 【Centos7】安装mongodb 使用yum源

    根据mongodb官网提供的教程安装: 1.创建mongdb-org-3.4.repo 2.使得selinux的config为disabled 3.yum -y install mongodbxxxx ...

  3. oracle撤销表空间和回滚段

    /* 撤销表空间 */ 通过使用撤销技术,能够为Oracle数据库提供以下功能: * 使用ROLLBACK语句撤销事务 * 进行数据库恢复 * 提供数据的读一致性 Oracle强烈建议DBA在Orac ...

  4. javaweb中重定向和请求转发(response.sendRedirect()和request.getRequestDispatcher(rul).forward(request,response)))的区别

    先来两张图,方便理解: 可以看出,重定向时,是服务器向游览器重新发送了一个response命令,让游览器再次向url2发送请求,以获取url2的资源 而请求转发时,类似于是服务器自己向自己发了一个跳转 ...

  5. 鸟瞰spring

    一.spring框架概述: Spring框架主要提供了Ioc容器.AOP.数据访问.Web开发.消息.测试等相关技术的支持. 1.Spring的模块 1)核心容器 Spring-Core:核心工具类, ...

  6. Android Studio的Terminal配置

    1.首先检查你的setting设置如下图 2.如果是已经ok的,请在你的Android sdk的文件夹目录下找到adb.exe,并配置环境变量 3.重启as,在terminal内输入 -adb hel ...

  7. java内存管理(堆、栈、方法区)

    java内存管理 简介 首先我们要了解我们为什么要学习java虚拟机的内存管理,不是java的gc垃圾回收机制都帮我们释放了内存了吗?但是在写程序的过程中却也往往因为不懂内存管理而造成了一些不容易察觉 ...

  8. Tomcat Cluster负载均衡

    author:JevonWei 版权声明:原创作品 Tomcat Cluster负载均衡 环境 tomcatA 172.16.253.108 tomcatB 172.16.253.105 代理服务器 ...

  9. eclipse没有联想功能的解决办法

    1.我window->Preferences->Java->Editor->content assist 把 Enable auto activation 选项打上勾 :(如下 ...

  10. Netty自娱自乐之协议栈设计

    ---恢复内容开始--- 俺工作已经一年又6个月了,想想过的真快,每天写业务,写业务,写业务.......然后就是祈祷着,这次上线不要出现线上bug.继续这每天无聊的增删改查,学习学习一下自己感兴趣的 ...