字符编码介绍

来源:互联网 发布:福建安全知识网络竞赛 编辑:程序博客网 时间:2024/06/03 09:17

ASCII(美国标准信息交换码):

 

字符与数字对应的编码规则。

最高bit位都为0(0,127)

 

GB2312:(国标码)

 

中文字符都用两个字节表示

每个字符的最高位bit为1

 

GBK:(国标K)

 

在GB2312基础上,对更多的中文字符进行编码。

 

 

BIG5:(大五码)

台湾地区对中文字符集的编码规则

 

Unicode:(国际通用码)

占用两个字节。

对ASCII的字符高位加0

表示范围2的16次方。还保留2000多个数值

 

UTF-8 :通用字符编码的统一转换

对不同范围内的字符,采用不同的字节个数来表示。

ASCII码保持不变。

其他国家的字符采用两个或三个字节来表示。

通常用EF BB BF 作为文件开头的三个字节数据。 

 

UTF-8 与Unicode的转换关系:

/u0001和/u007f之间的字符,编码为(byte)c

/u0000或者/u0080和/u07ff之间的字符,编码为:(byte)(0xc0|0x1f&(c>>6))),(byte)(0x80|(0x3f&c))

/u0800和/uffff之间的字符,编码为:(byte)(0xe0|(0x0f&(c>>12))),(byte)(0x80|(0x3f&(c>>6))),(byte)(0x80|(0x3f&c))

 优点:

不出现内容为0x00字节

便于应用程序检测数据在传输过程中是否发生错误。

直接处理使用ASCII码的英文文档。

缺点:

有些字符需要三个字节。

 

 

UTF-16:

在Unicode的细节上的扩充,只是增加了对Unicode编码没有包括的那些字符的表示方式。

Unicode将0xD800-0xDFFF保留出来,(2048)进行扩充用。占用4个字节。

前两个字节0xD800-0xD8FF.后两个字节为0xDC00-0xDFFF

如果文件以0xFE 0xFF开头表明文本的其余部分是Big-Endian的Utf-16编码(高字节在前,低字节在后)

如果以0xFF 0xFE开头,表明是Little-Endian的utf-16编码(高字节在后,低字节在前)

 

设置系统默认字符集

System.setProperty("file.encoding","iso8859-1");//美国字符集

System.getProperties().list(System.out);//打印

 

new String(strInfo.getBytes("iso8859-1"),"gb2312"));//原始码是Unicode.方可解码。

如果直接用“iso8859-1”进行Unicode编码.格式一般是把字节对半拆开,然后再在前加两个00

 

 

乱码情况:

1,编写时的指定的编码,和输出时的编码不一致

2,编写时指定的编码,外部不支持

3,编写时指定的编码,外部也支持。但是误导使用者是另一种编码