好好缕一缕编码格式

    学无止境 ImbaQ 764次浏览 0个评论

    最近在做一个java的项目,经常要重复性的抽取脚本、生成代码。对这种重复性的体力劳动我是绝对不能忍的,于是折腾出一个小工具,过程中编码的问题各种吭,现在辅助工具功能已完成,来好好缕一缕编码的问题。

    编码发展的三大阶段:

    ASCII:只支持英文的,一个字节存一个字符(英文或数字)

    ANSI:本地化阶段,使用 0x80~0xFF 范围的两个字节来表示一个字符(英文或数字只占一个字节0x00~0x79)。

    不同的国家和地区制定了不同的标准于是有了:GB2312(简体中文系统)、GBK(微软制定GB2312的扩展,包括繁体中文,日文假名)、其它语言系统(Big5、JIS)

    UNICODE:国际化阶段,各种语言中的每一个字符有了统一并且唯一的数字编号,所有字符都占用两个字节,方便了跨语言、跨平台交流。

    此字符集产生多个编码标准,于是有了UTF-8,UTF-16等。

    常见的编码:

    记事本另存文件时候的编码有四种:ANSI、Unicode、UnicodeBigEndian、UTF8,分别用四种编码保存一份内容为“记事本”的文件,查看十六进制的实际内容如下:

    好好缕一缕编码格式

    ANSI就是两个字节表示一个中文字符的

    两种Unicode的区别就是每两个字节位置交换,开头的FF FE和FE FF就是用来区别高低位的

    UTF8做为标准Unicode的一种实现它使用三个字节来表示一个中文字符,开头的EF BB BF是BOM

    那么不带BOM的UTF8编码就是直接去掉开头的三个字节,因为UTF8的编码方式是没有字节序区别的,据说这个带BOM的UTF8编码是我大微软的习惯而已,也是诸多的黑点之一啊,像PHP压根就不认识这三个BOM字节,而其它系统对带BOM的UTF8处理也不太完善。

    HTML有charset属性,XML有encoding属性,这两种文件最主流的还是GB2312和UTF8(无BOM)

    作为软狗一枚,以后UTF8就默认带BOM了,不带的会另外说明,VS文件编码都是UTF8的,System.Text.Encoding下的几种常用编码保存结果和记事本一致,其中Default就会保存为ANSI(在中文简体操作系统中就是GB2312)

    查了好多资料,简单的总结就是这样了,至于半全角、字节序、编码转换这任何一个都可以长篇大论的,附发现的两篇很有料的文章,看看一定受益匪浅

    字符集和字符编码(Charset & Encoding)

    各种编码UNICODE、UTF-8、ANSI、ASCII、GB2312、GBK详解


    iHomeSoft, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明!
    好好缕一缕编码格式