关键字: 编码
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 7x 永远是0
例子,A, 用Hex表示是00 41,去掉开头的零字节是Hex 41,转成二进制是 0100 0001。XP带的计算器可以在Hex和Binary
之间转换,自己试试。
第128(十进制)到2047个字节,要用10个bit来表示
[code="java"]
0 0 0 0 0 x10 x9 x8
x7 x6 x5 x4 x3 x2 x1 x0
[/code]
Utf-8就把这些字节编成下面这样的两个byte
[code="java"]
1 1 0 x10 x9 x8 x7 x6
1 0 x5 x4 x3 x2 x1 x0
[/code]
第2048(十进制)到65535个字节,要用16个bit来表示,Utf-8把这些字节编成下面这样的三个byte
[code="java"]
1 1 1 0 x15 x14 x13 x12
1 0 x11 x10 x9 x8 x7 x6
1 0 x5 x4 x3 x2 x1 x0
[/code]
读一个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 CharSetTest {
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();="" }="" }="" <="" pre="">
e5 93 88
0101 0100 1100 1000
1110 0101 1001 0011 1000 1000
toHexString ffffffe5,ffffff93,ffffff88具体怎么解释呢,搞的不清楚呀!大家多指点呀!
分享到:
相关推荐
请使用这款软件,直接将代码转换为UTF-8 注意: 1、xml不需要转换,因为xml默认是utf-8,在你新建的时候已经是正确的格式了 2、图片更不需要转换 3、bin目录,gen目录的直接忽略 4.只需要src目录的代码转换,请确保...
最近需要对Linux与Windows平台下的字符传输出现乱码,对...参考了网上的UTF-8/UTF-16转换的资料,只有0x10000以下的Unicode编码进行了转换;对其代码进行了修改和补充,可以实现所有的UTF-8/UTF-16的转换,分享给大家。
批量将文件编码方式由ansi转为utf-8,方便快速,转换速度快并且无错误,容易操作。
Java工程编码格式由GBK转化成utf-8(编码格式互转) https://ymjin.blog.csdn.net/article/details/118769530
由于项目需要,需要字符串转为XML文件,直接用Fileopen进行EncodingUTF8编码后,发现文件实际为UTF-8 BOM编码 问度娘发现有相同问题,但解决方式是利用新建一个UTF-8的TXT文件后,再进行COPY加内容。感觉这样操作...
Txt文件编码批量转换器用于批量转换txt文本文档的编码格式。通常,我们电脑里的txt文件都是ASNI编码,当放到手机或MP3里时,打开看到的往往...目前,它支持ASNI、UTF-8、Unicode和Unicode big endian等编码的相互转换。
百度编辑器 asp版 UTF-8编码;通过本人亲自己测试修改。
WIN10 cmd控制台本来的编码是ANSI的,所以要求执行的批处理脚本编码格式也是ANSI才行,要不就两边统一都改成UTF-8处理(作为一个程序员,一般我都会统一成UTF-8编码格式),下面就介绍如何统一改成UTF-8编码格式,和恢复为...
可批量将UTF-8的文本文件转为ANSI文本文件,代码略加修改,即可在换任意两种编码的文本文件内互相转化。
批量转换文件编码格式为UTF-8工具.zip 支持多层文件夹替换! 使用说明: 1.文件根目录:即您要转码的文件所在根目录 2.转码文件目录:即您转码后的文件所在目录 3.转码文件后缀:指[文件根目录]下,需要转码的文件后缀,...
当上传文件存在中文时,修改上传文件编码为utf-8-bom
ANSI --> UTF-8 Unicode --> ANSI Unicode --> UTF-8 UTF-8 --> ANSI UTF-8 --> Unicode UTF-8 --> Unicode big endian ansi转别的,不检验BOM,一律作为ansi编码进行转换 unicode转别的,首先检验BOM,不合格不...
修改xml文件的编码格式:GB2312格式修改为UTF-8
ArcGIS默认dbf代码页-设置为UTF-8,解决有需要将gdb导出成shape file并将字符集设置成Utf-8以避免中文乱码的情况。
当需要将文本文件导入SAS中时,UTF-8编码的中文有可能会乱码,此文讨论了一种解决方法
source insight 3.5 UTF-8中文乱码插件,提示! 我自己用3.5版本亲测有效,4.0版本我未测试过
C#:批量修改文本编码为UTF-8(含源码),可将指定文件夹下的所有是.txt、.cs、.lua后缀的文件(需要更多支持可自行修改)的编码格式修改为UTF-8,VS2013的项目。
基于MFC CString的GBK与UTF-8编码转换,在网上找到一些代码都有问题,但都存在一些错误。现在改好了,与大家分享一下。 (MFC 非UNICODE)
linux C/c++ 源代码,将中文字串与UTF-8格式字串相互转化,我在项目中使用的代码,完全可用
WIN10 cmd控制台本来的编码是ANSI的,所以要求执行的批处理脚本编码格式也是ANSI才行,要不就两边统一都改成UTF-8处理(作为一个程序员,一般我都会统一成UTF-8编码格式),下面就介绍如何统一改成UTF-8编码格式