字符编码之UTF-8

简介:

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

目录
相关文章
|
3月前
|
存储 编解码 C语言
ASCII、GBK与UTF-8的联系
ASCII、GBK与UTF-8的联系
38 1
|
存储 自然语言处理 算法
UTF-8编码
通过阅读本篇文章,你可以了解到:UTF-8编码的规则。
253 0
UTF-8编码
|
存储 JavaScript 程序员
【字符编码详解】ASCII、GB2312、GBK、UTF-8、UTF-16编码与Unicode字符集
【字符编码详解】ASCII、GB2312、GBK、UTF-8、UTF-16编码与Unicode字符集
524 0
|
存储 算法 Java
Java编码ASCII、GB2312、GBK、Unicode、UTF-8、UTF-16 编码方式详解
Java编码ASCII、GB2312、GBK、Unicode、UTF-8、UTF-16 编码方式详解
315 0
|
JavaScript 前端开发
utf8 and unicode
utf8 and unicode
utf8 and unicode
|
存储 关系型数据库 MySQL
关于UTF-8编码相关知识的简单介绍
关于UTF-8编码相关知识的简单介绍
133 0
|
Web App开发 JavaScript Java
编码问题 UTF-8 & GBK
记一次奇怪的编码问题。 * Meta Element vs Response Header * Meta 的作用? * 一个细节 * 细节对编码的影响 ## Meta Element vs Response Header 一个 GBK 编码页面,使用 meta 指定页面编码和使用 response header 指定页面编码。哪个优先级比较高? ###
2357 0
|
关系型数据库 Oracle