首页 生活常识

汉字转unicode编码怎么用(中文转bytes,unicode转bytes java实现)

日期:2024-07-09 06:45:59   编辑:架构师笔记 

字符串的编码格式:

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表去查询汉字

编码完全匹配。

你感兴趣的

五一我在岗 西安动车段动车组机械师坚守岗位保障旅客安全出行

【来源:西安新闻网】五一劳动节当天,中国铁路西安局集团有限公司西安动车段动车组机械师们坚守岗位,加强动车组走行部、车顶高压设备、车内服务设施等关键部位的检查力度,排查各类故障隐患,确保动车组性能处于最佳状态,保障“五一”假期动车组运能供给,全力提升广大旅客乘车体验。西安报业全媒体首席记者 梁璠 通讯

酒店的床为什么是圆的(为什么情趣酒店的床,都是圆的?)

如果你一不小心误入情趣酒店你一定会被眼前的“景色”惊到情趣酒店什么奇怪的风格都有但它们通常也有一些共性比如喜欢用红色系比如喜欢用大圆床今天我就带各位一起探究下为啥情趣酒店对红色和圆床情有独钟?情趣酒店为什么喜欢用红色?普通酒店通常都会把“白色”作为主色调突出一个干净又卫生而情趣酒店们却更喜欢用饱和度

林阳热水器-全国各售后热线实时反馈-今-日-汇-总

林阳热水器的售后维修电话是:400-883-8253。林阳热水器作为智能家居市场的佼佼者,以其先进的技术和优质的产品赢得了广大消费者的青睐。再优质的产品也难免会在使用过程中出现一些问题,因此售后服务的质量就显得尤为重要。为了保障用户的使用体验,林阳热水器提供了专业的售后维修服务,其中一个重要的服务渠

欧必德热水器24小时售后全国客服受理中心实时反馈-今-日-汇-总

欧必德热水器作为国内知名的安全门品牌,一直以卓越的品质和周到的服务赢得了广大消费者的信赖。为了更好地服务每一位用户,欧必德热水器特别设立了24小时服务热线,全国统一售后服务电话为400-883-8253。无论您在使用过程中遇到任何问题,都可以随时拨打这个电话,我们的专业客服团队将竭诚为您服务。

京辉黄指纹锁售后24小时联系方式维修查询实时反馈-今-日-汇-总

京辉黄指纹锁:400-883-8253,一键呼叫,服务到家——让您的京辉黄指纹锁明心之所向,践专注之行。我们深知您的京辉黄指纹锁电器对您意义非凡,因此我们提供全方位的,让您的京辉黄指纹锁在使用中随时享受如家的呵护:京辉黄指纹锁 售后,您专属的京辉黄指纹锁 服务团队,全天候技术支持,为您打造简

朗菲指纹锁全国统一服务号码-全国服务热线实时反馈-今-日-资-讯

朗菲指纹锁全国售后客服电话为400-883-8253,该电话开通时间为每周一至周五08:00-24:00,周六、周日08:00-23:00。此电话是提供给朗菲指纹锁用户的专业客服电话,主要是为了解决用户使用朗菲指纹锁的遇到的问题和故障。用户遇到问题时,可以通过拨打该号码,联系到专业的

图文推荐

  • 五一我在岗 西安动车段动车组机械师坚守岗位保障旅客安全出行

  • 酒店的床为什么是圆的(为什么情趣酒店的床,都是圆的?)

  • 林阳热水器-全国各售后热线实时反馈-今-日-汇-总

  • 欧必德热水器24小时售后全国客服受理中心实时反馈-今-日-汇-总

  • 京辉黄指纹锁售后24小时联系方式维修查询实时反馈-今-日-汇-总

  • 朗菲指纹锁全国统一服务号码-全国服务热线实时反馈-今-日-资-讯