UTF-8 GBK GB2312的区别

linux下开发的同志们,经常会遇到的字符集问题,总浪费时间还很纠结!
我在这里简单总结了一下,希望对你有帮助

大部分问题都是和中文相关导致的,至于其他语种的这里就不关注了。着重说GBX和UTF-8

0. UTF-8和GB系列都可以表示中文,只是内在表示方式不同而已

1. 这几种字符集,为了兼容ASCII,与原ASCII对应的那些字符的编码结果不变,即普通英文字符数字什么的,还只是占一个字节

2. 对于汉字,GB系列是双字节编码类的,每个汉字占两字节,而UTF-8需要用三个字节来表示

3. GB系列是逐渐扩展出来的,可表示的字符越来越多,GB2312 -> GBK -> GB18030...

4. UTF-8还有一个bom的问题,通常linux下默认创建的文件时不会加bom的,即utf-8无bom
   bom就是个文件头,多了几个字节用来标记本文件的类型,用于区分utf-16 utf-32...

 文件头 编码方式
 00 00 FE FF UTF-32, big-endian 
 FF FE 00 00  UTF-32, little-endian 
 FE FF UTF-16, big-endian 
 FF FE  UTF-16, little-endian 
  EF BB BF  UTF-8

PS:  纯文本文件,通常不带文件头来标记文件类型,而是需要编辑器来识别。
比如,纯英文的文件,让编辑器看来,实际上各字符集根本就没什么关系,因为此时各字符集对应的结果是一致的。


还不明白?自己看看吧,推荐好文:
http://www.blogjava.net/dreamstone/archive/2006/11/28/83936.html
http://unicode.org/faq/utf_bom.html#BOM

你可能感兴趣的:(字符集)