字符编码之UTF-8

博学,切问,近思--詹子知 (http://blog.****.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 ""; } }

上一篇:带你读《SAS数据分析开发之道 软件质量的维度》第二章质量2.1质量的定义(九)


下一篇:带你读《SAS数据分析开发之道 软件质量的维度》第二章质量2.3SDLC的质量(一)