中文转unicode,中文转bytes,unicode转bytes java实现
字符串的編碼格式:
String hex="\u5df2\u5b9e\u540d\u5236";// 十六進制
String dec = "全球通";//十進制
String s="已實名制";//字符串
相互轉(zhuǎn)換的代碼
1.十進制轉(zhuǎn)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轉(zhuǎn)char數(shù)組
/** * unicode 轉(zhuǎn)字符數(shù)組 */ 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++) { // 轉(zhuǎn)換出每一個代碼點 int data = Integer.parseInt(hex[i], 16); cs[i]=(char) data;} return cs; }3.漢字轉(zhuǎn)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格式的中文由三位字節(jié)組成。
UTF-8的編碼規(guī)則很簡單,只有二條:
1)對于單字節(jié)的符號,字節(jié)的第一位設(shè)為0,后面7位為這個符號的unicode碼。因此對于英語字母,UTF-8編碼和ASCII碼是相同的。
2)對于n字節(jié)的符號(n>1),第一個字節(jié)的前n位都設(shè)為1,第n+1位設(shè)為0,后面字節(jié)的前兩位一律設(shè)為10。剩下的沒有提及的二進制位,全部為這個符號的unicode碼。
下表總結(jié)了編碼規(guī)則,字母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.中文轉(zhuǎn)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.中文轉(zhuǎn)bytes
byte[] b=s.getBytes("utf-8");3. unicode轉(zhuǎn)utf-8
/** unicode轉(zhuǎn)到utf-8的轉(zhuǎn)換過程。* @param 要進行轉(zhuǎn)換的漢字* @return 16進制表示的漢字UTF-8編碼字節(jié)序列 /*/public static String unicode2utf8(char input){//1 Byte=8byte 16位取值范圍00~ff//input 兩個字節(jié) 16位取值范圍為4E00~9FA5int lowByte = input & 0x00ff;int highByte = (input & 0xff00) >>> 8;// UTF-8的第1個字節(jié)是1110 + highByte高4位int high4inHighByte = (highByte& 0xf0) >>> 4;int utf8Byte1 = (7 << 5) + high4inHighByte;// UTF-8的第2個字節(jié)是10 + highByte低4位 + lowByte高2位int low4inHighByte = highByte & 0x0f;int high2inLowByte = (lowByte& 0xc0) >>> 6;int utf8Byte2 = (1 << 7) + (low4inHighByte << 2) + high2inLowByte;// UTF-8的第3個字節(jié)是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編碼依然采用雙字節(jié)編碼方案,其編碼范圍:8140-FEFE,剔除xx7F碼位,共23940個碼位。共收錄漢字和圖形符號21886個,其中漢字(包括部首和構(gòu)件)21003個,圖形符號883個。GBK編碼支持國際標準ISO/IEC10646-1和國家標準GB13000-1中的全部中日韓漢字,并包含了BIG5編碼中的所有漢字。GBK編碼方案于1995年12月15日正式發(fā)布,這一版的GBK規(guī)范為1.0版。
GBK 亦采用雙字節(jié)表示,總體編碼范圍為 8140-FEFE,首字節(jié)在 81-FE 之間,尾字節(jié)在 40-FE 之間,剔除 xx7F 一條線。總計 23940 個碼位,共收入 21886 個漢字和圖形符號,其中漢字(包括部首和構(gòu)件)21003 個,圖形符號 883 個。
全部編碼分為三大部分:
1. 漢字區(qū)。包括:
a. GB 2312 漢字區(qū)。即 GBK/2: B0A1-F7FE。收錄 GB 2312 漢字 6763 個,按原順序排列。
b. GB 13000.1 擴充漢字區(qū)。包括:
(1) GBK/3: 8140-A0FE。收錄 GB 13000.1 中的 CJK 漢字 6080 個。
(2) GBK/4: AA40-FEA0。收錄 CJK 漢字和增補的漢字 8160 個。CJK 漢字在前,按 UCS 代碼大小排列;增補的漢字(包括部首和構(gòu)件)在后,按《康熙字典》的頁碼/字位排列。
(3) 漢字“〇”安排在圖形符號區(qū)GBK/5:A996。
2. 圖形符號區(qū)。包括:
a. GB 2312 非漢字符號區(qū)。即 GBK/1: A1A1-A9FE。其中除 GB 2312 的符號外,還有 10 個小寫羅馬數(shù)字和 GB 12345 增補的符號。計符號 717 個。
b. GB 13000.1 擴充非漢字區(qū)。即 GBK/5: A840-A9A0。BIG-5 非漢字符號、結(jié)構(gòu)符和“〇”排列在此區(qū)。計符號 166 個。
3. 用戶自定義區(qū):分為(1)(2)(3)三個小區(qū)。
(1) AAA1-AFFE,碼位 564 個。
(2) F8A1-FEFE,碼位 658 個。
(3) A140-A7A0,碼位 672 個。
第(3)區(qū)盡管對用戶開放,但限制使用,因為不排除未來在此區(qū)域增補新字符的可能性。
舉例:
String s="中文";byte[] b=s.getBytes("gbk");bytes為
[-42, -48, -50, -60]
補碼為:
【214,208,206,196】
轉(zhuǎn)換為十六進展為
【D6,D0,CE,C4】
按照gbk表去查詢漢字
?
編碼完全匹配。
?
轉(zhuǎn)載于:https://www.cnblogs.com/davidwang456/p/7576066.html
總結(jié)
以上是生活随笔為你收集整理的中文转unicode,中文转bytes,unicode转bytes java实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java代码实现python2中aes加
- 下一篇: Scrapy Architecture