字符編碼之UTF-8
博學,切問,近思--詹子知 (https://blog.csdn.net/zhiqiangzhan)
UTF-8(8 位元 Universal Character Set/Unicode Transformation Format)是一種針對Unicode的可變長度字元編碼。
UTF-8 是一種傳輸編碼,他和定長的Unicode編碼有如下關係。
UCS (Universal Character Set)
UTF (UCS Transformation Format)
UCS-2字符編碼(十六進製數) | UTF-8字節流(二進製數) |
0000-007F | 0xxxxxxx |
0080-07FF | 110xxxxx 10xxxxxx |
0800-FFFF | 1110xxxx 10xxxxxx 10xxxxxx |
因為網絡上大量傳輸的數據都是ASCII字符,比如HTML標記,XML標記等等,所以UTF-8有很高的傳輸效率,而且又可以兼顧不同地區的語言編碼。
下麵的代碼描述Unicode和UTF-8之間的轉換。
public class UTF { private static final int SINGLE = 0x0080; private static final int DOUBLE = 0x0800; public static String unicode2Utf8(char c){ if(c < SINGLE){ return Integer.toHexString(c); }else if(c < DOUBLE){ int a = c & 0x3F; // 111111 a |= 0x80; int b = c & 0x7CF; // 11111 000000 b <<= 2; b |= 0xC0; return Integer.toHexString(b | a); }else{ int a = c & 0x3F; a |= 0x80; int b = c & 0xFC0; b <<= 2; b |= 0x8000; int x = c & 0xF000; x <<= 4; x |= 0xE00000; return Integer.toHexString(a | b | x); } } public static String utf2Unicode(int u){ int len = Integer.toBinaryString(u).length(); if(len < 8){ return Integer.toHexString(u); }else if(len == 16){ int a = u & 0x3F; int b = u & 0x1F00; b >>= 2; return Integer.toHexString(a | b); }else if(len == 24){ int a = u & 0x3F; int b = u & 0x3F00; int c = u & 0x0F0000; b >>= 2; c >>= 4; return Integer.toHexString(a | b | c); } return ""; } }
最後更新:2017-04-02 04:00:25