什么是BOM(Byte Order Mark)【字节序标记】【大端BE】【小端LE】

字节序(Byte Order)是与信息编码相关的概念,自然也是与字符编码有关的概念,分为大端和小端二种:

  • 大端 BE(Big endian):将高位字节存储在内存的低地址端,低位字节存储在内存的高地址端。

  • 小端 LE(Little endian):将低位字节存储在内存的低地址端,高位字节存储在内存的高地址端。

根据字节序的不同,UTF-16可分为小端的UTF-16LE和大端的UTF-16BE。
首先,明确一点,数据存储的最小单元是字节;数据在内存中的存放是以字节为单位的。在字节内部是没有所谓的高位高址和低位低址的。
每个字符在内存中存放数据时,先将这个字符的码元拆分为以字节为单位。然后根据字节序,再将高位字节和低位字节进行存储。

当文本数据在本机处理时几乎不用关心编码的字节序,只有当文本数据在网络传输时通讯双方才需要约定字节序或传输字节序标记BOM(Byte Order Mark)。
实际上,字节序(Byte Order)是一个数据编码的通用术语,不仅在字符编码方案中使用,在其他数据编码中,比如音频、视频的数据编码格式中字节序的大小端也是适用的。

Unicode标准
Unicode是通用字符编码标准是计算机科学领域里的一项业界标准,包括字符集、编码方案等。
Unicode标准定义了一个统一的多语言文本字符集(即Unicode字符集)。Unicode标准为Unicode字符集定义了三种字符编码方案:UTF-8、UTF-16、UTF-32。其目的是为了更好地适应不同的应用场景。

  • UTF-8是可变长度的编码方案,码元长度是8-bit(1个字节),每个码点分别由一到四个码元来表示。少的一个字符(如ASCII码字符)只需要一个码元即可表示,但多的则需要四个码元才能表示。规则最复杂,但最节约存储空间。尤其是在欧美国家处理ASCII码字符为主的应用场景中,无论是网络传输还是存储都最节约空间。
  • UTF-16也是可变长度编码方案,它博采众长,既要节约存储空间,规则又要简单。码元长度是16-bit(2个字节),每个码点分别由一到二个码元表示。
  • UTF-32是固定长度的编码方案,码元长度是32-bit(4个字节),每个码点统一由一个码元来表示。规则最简单,所有的字符都用一个码元来表示,但最浪费存储空间。

不同的编码方案有不同的字节序标记BOM(Byte Order Mark)。
Unicode编码方案中UTF-8是个例外,没有大端和小端之分。
UTF-16的字节序用一个非字符的码点(双字节)表示,UTF-16LE的字节序U+FFFE(FF FE),UTF-16BE的字节序U+FEFF(FE FF)。各种UTF字符编码方案的字节序标记BOM如下所示:

在这里插入图片描述

例如:中文字符“汉”的Unicode码点为U+6C49,其十六进制值0x6C49。
utf-16编码方案中,它只需用一个码元就可表示,占两个字节空间。
utf-32编码方案中,它 也用一个码元,占四个字节空间。
在这里插入图片描述

文本文件查看文件头中的BOM的例程,请参见博客:
二进制文件与文本文件的区别【字符集Charset】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值