Utf-8编码是如何工作的讲起。
(JVM规范第4.4.7提了一些,O'Reilly出的Java I/O里讲的比较详细,我手里的是第一版,在第14章,Mutillingual Character Sets and Unicode)
Java用的Unicode用两个字节表示一个charater,字母A用Hex表示是00 41, B是00 42,在一个纯英文的环境里面,直接存成Unicode的文件一半都是由零组成的,浪费资源。Utf-8的主要目的是对ASCII表格头128个字母优化,牺牲的是对中文字符的存储。
头128个字节(0到127),可以用七个bit来表示,x6 x5 x4 x3 x2 x1 x0.第八个bit永远是0
例子,A, 用Hex表示是00 41,去掉开头的零字节是Hex 41,转成二进制是 0100 0001。XP带的计算器可以在Hex和Binary
之间转换,自己试试。
第128到2047个字节,要用10个bit来表示
0 0 0 0 0 x10 x9 x8
x7 x6 x5 x4 x3 x2 x1 x0
Utf-8就把这些字节编成下面这样的两个byte
1 1 0 x10 x9 x8 x7 x6
1 0 x5 x4 x3 x2 x1 x0
第2048到65535个字节,要用16个bit来表示,Utf-8把这些字节编成下面这样的三个byte
1 1 1 0 x15 x14 x13 x12
1 0 x11 x10 x9 x8 x7 x6
1 0 x5 x4 x3 x2 x1 x0
读一个Utf-8编码的array,如果第一个byte的高位是1110,那么要连读下面两个以 10 开头的byte。如果一个byte的高位是110,那么要连读下面一个以 10 开头的byte。
如果一个byte的高位是0,那么这个byte就是一个字符了。
可以做个练习,中文字"哈"的Unicode编码是Hex 54 C8,转成Utf-8是什么?
Hex 54 C8 转成十进制是21704,转成Utf-8后要用三个byte,找张纸,画三行,每行8个格子,第一行头四个格子填上1110,第二行头两个格子填上10,第三行头两个格子填上10。剩下的自己算算。然后和这个程序的结果比较一下。
public class Test {
public static void main(String[] args) {
char c[] = { '\u54c8' };
String ha = new String(c);
byte b[] = null;
try {
b = ha.getBytes("utf-8");
} catch (Exception e) { System.exit(-1);}
for(int i=0; i<b.length; i++) {
System.out.print(Integer.toHexString(b[i]).substring(6) + " ");
}
System.out.println();
}
}
分享到:
相关推荐
GBK、UTF-8批量文件3秒快速转码工具(支持GBK,UTF-8免费转换),UTF-8/GBK编码在线转换工具,压缩包可以有多目录与文件,如目录中有图片不会转码,但是会随转码好的文件一起打包下载。 使用帮助 . 上传压缩包(仅支持zip...
最近的项目(Delphi开发),需要经常和java语言开发的系统进行数据交互(Socket通信方式),数据编码约定采用UTF-8编码。 令我无语的是:JAVA系统那边反映说,Delphi发的数据他们收到是乱码,而我这边(Delphi7,...
如果UNICODE字符由2个字节表示,则编码成UTF-8很可能需要3个字节,而如果UNICODE字符由4个字节表示,则编码成UTF-8可能需要6个字节。用4个或6个字节去编码一个UNICODE字符可能太多了,但很少会遇到那样的UNICODE...
请使用这款软件,直接将代码转换为UTF-8 注意: 1、xml不需要转换,因为xml默认是utf-8,在你新建的时候已经是正确的格式了 2、图片更不需要转换 3、bin目录,gen目录的直接忽略 4.只需要src目录的代码转换,请确保...
为大家提供Python的UTF-8编码查询表,大家可以对照左列的编码查询右列的汉字。 例:\u4e00对应汉字“一”
文件里有详细的代码,编码格式选择UTF-8编码,亲测在linux下可以直接运行。泰文在osd输出的流程一般是泰文先转换成Unicode编码,然后调用freetype进行文字渲染叠加
此文本文档是UTF-8字符集中汉字编码对照表,可以用于查看某个汉字在UTF-8编码集中的位置。此编码集对照表非官网下载,如需使用,请提前预估风险。另外,此对照表只用于学习研究,如需用到其他地方,后果自负。
最近需要对Linux与Windows平台下的字符传输出现乱码,对...参考了网上的UTF-8/UTF-16转换的资料,只有0x10000以下的Unicode编码进行了转换;对其代码进行了修改和补充,可以实现所有的UTF-8/UTF-16的转换,分享给大家。
可以实现编码转换,使用编码utf-8转换成gbk
iOS 显示汉字的Unicode和UTF-8编码
可以将文字转换为UTF-8编码的一个小工具,非常实用。
PowerBuilder9.0开发环境下,可以把UTF-8的编码转换为Unicode的编码格式,在pb9.0环境下测试通过。
Unicode转UTF-8
百度编辑器 asp版 UTF-8编码;通过本人亲自己测试修改。
utf-8中文汉字编码表
本工具可以根据需要批量将一个目录及其子目录下的所有文件转换为GB2312或Utf-8编码文件,绿色软件,无需安装。 需要.NET Framework v2.0 运行库支持。
utf-8转换工具是非常好用的一款工具,用于将中文转换成utf-8格式的字符
文件的编码格式需要转换,gb2312,utf,utf-8等编码格式的相互转换等
php 字符编码转换类,支持ANSI、Unicode、Unicode big endian、UTF-8、UTF-8+Bom 互相转换。
有时候utf-8的网站 需要点中文或者特殊符号,会出现乱码,用这个就可以转换成utf-8 可以识别的转意字符