我们常见的编码有三类,一是ASCII编码,二是GB系列编码,三是Unicode系列编码。
ASCII编码只能用来存储英文,GB系列编码是我国的国标编码,用来存储汉字,分为GB2312,GBK,GB18030,基本都能向前兼容,其中GBK是目前最通用的,今天重点说一下Unicode编码问题。
Unicode编码是ISO国际标准化组织为了解决世界上各个国家和地区编码不同二设计的一个全世界通用的编码格式,不过他只规定了字符的编码,却没有规定字符以何种方式存储或者传输。所以UTF系列编码规定了Unicode编码的存储和传输方式。
目前最常用的UTF编码分为3种,UTF-8,UTF-16和UTF-32,我们知道计算机是以8位为一个字节来存储数据的,而UTF-16,UTF-32分别用2字节和4字节来表示一个字符,所以这里就涉及到字节的存储顺序,是低位在前还是高位在前,这样,BOM就产生了。
BOM是文本文件开头的一个特殊标记,用一组特殊数字来标记文本文件的字节序。虽然UTF-8字节顺序是固定的,但为了兼容UTF-16和UTF-32也规定了UTF-8的BOM,用于标记UTF-8编码。不过UTF-8的BOM在不同平台的规定不同,要小心使用。BOM规定如下。
UTF-8 EF BB BF
UTF-16(LE) FF FE
UTF-16(BE) FEFF
UTF-32(LE) FF FE 00 00
UTF-32(BE) 00 00 FE FF
另外要说一下我们常用的 Windows系统下记事本的几种编码类型
ANSI:对于不同语言平台,实现的内容不用,如果使用简体中文系统的话就是GBK编码
UTF-8:Windows使用的UTF-8是带BOM的UTF-8
Unicode:Winodws下所谓的Unicode其实是UTF-16LE
另外说点无关的话题,Windows下的换行符是\r\n,Linux,Unix,macOS下的换行符都是\n