浅谈ISO 8859-1与UTF-8

ISO/IEC8859-1,又称Latin-1或“西欧语言”,是国际标准组织内ISO/IEC 8859的第一个8位字符集。它以ASCII为基础,在空置的0xA0-0xFF的范围内,加入96个字母及符号,藉以供使用变音符号的拉丁字母语言使用。

UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码。由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。UTF-8用1到4个字节编码UNICODE字符。用在网页上可以同一页面显示中文简体繁体及其它语言。

  1. publicclassStringCheese{
  2. publicstaticvoidmain(String[]args){
  3. bytebytes[]=newbyte[256];
  4. for(inti=0;i<256;i++)
  5. bytes[i]=(byte)i;
  6. Stringstr=newString(bytes);
  7. for(inti=0,n=str.length();i<n;i++)
  8. System.out.println((int)str.charAt(i)+"");
  9. }
  10. }

如上代码,若String str = new String(bytes, "iso-8859-1");代码将以iso-8859-1字符集编码,而iso-8859-1字符集是8位字符集,将打印0~255。

而Java使用UTF-16表示内部文本,并支持用于字符串串行化的非标准的修正UTF-8编码。修正的UTF-8中,null字符编码成2个字节(1100000010000000)而不是标准的1个字节(00000000),这样作可以保证编码后的字符串中不会嵌入null字符。因此如果在类C语言中处理字符串,文本不会在第一个null字符时截断(C字符串以'\0'结尾)。

在标准UTF-8编码中,超出基本多语言范围(BMP-BasicMultilingualPlain)的字符被编码为4字节格式,但是在修正的UTF-8编码中,他们由代理编码对(surrogatepairs)表示,然后这些代理编码对在序列中分别重新编码。结果标准UTF-8编码中需要4个字节的字符,在修正后的UTF-8编码中将需要6个字节。
utf-8的字符的字节数是可变长的,如果一个byte的最高位是0, 则认为该字节是是一个单字节字符,也即和ascii部分是一致的。所以对于代码, 0~127满足utf-8单字节字符的要求, 可以被正确识别。但是如果最高位不是0, 则需要满足更多的规则,比如,两个字节的utf8的二进制应该满足110xxxxx 10xxxxxx. 三个字节的应该满足1110xxxx 10xxxxxx 10xxxxxx。如果不满足这些规则,则会用65533代替该字符,表示它无法识别



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值