编码方式是什么,第1张

编码是指通过特定的压缩技术,将某种视频格式的文件转换成另一种视频格式的文件。视频流中最重要的编解码标准是ITU的H.261和H.263,运动静止图像专家组的M-JPEG和国际标准化组织运动图像专家组的MPEG系列标准。

所谓编码方式,是指通过特定的压缩技术,将某一视频格式的文件转换成另一视频格式文件的方式。视频流中最重要的编解码标准是ITU的H.261和H.263,运动静止图像专家组的M-JPEG和国际标准化组织运动图像专家组的MPEG系列标准。此外,真实网络公司的实时视频、微软公司的WMT和苹果公司的快速时间在互联网上被广泛使用。

编码方式是什么,编码方式是什么,第2张

音频和视频编码

音频数字化主要有两种方式:压缩和非压缩。早期的数字音频播放器,如CD播放器、DAT录音机,都是用线性脉码调制来存储音乐信号的,是未压缩的。在高质量要求的音频工作站和数字录像机(如DVCPRO)上,也采用未压缩格式。

我们常见的MPEG,杜比数码,DTS都是压缩方式。压缩分为有损压缩和无损压缩。有损压缩的目的是提高压缩率,减少对系统资源的占用。可以根据实际需要选择不同的采样速率、采样分辨率(精度)和数据速率。

数字卫星广播系统的信源编码技术采用MPEG-2.5第三层语音编码算法。第三层编码算法最复杂,延迟最大,效率最高。因此,对于一定的数据速率,第3层协议获得最佳的音质。当然,用户可以根据需要选择8-128 kbps范围内的不同速率。音质可以达到CD音质。

未压缩编码(PCM)

声音之所以能数字化,是因为人耳能听到的声音频率不是无限宽的,主要在20kHz以上。根据采样定理,只有采样频率大于40kHz,才能重构出原声而不失真。比如CD的采样频率是44.1kHz,其他的主要是48kHz或者96kHz。

脉码调制是一种将模拟语音信号转换成数字信号的编码方法。主要有三个过程:采样、量化和编码。在采样过程中,将连续时间的模拟信号转换为离散时间和连续幅度的采样信号;在量化过程中,采样信号变成离散时间和离散幅度的数字信号;并且在编码过程中,量化信号被编码成二进制代码组用于输出。

压缩编码

PCM虽然是无损压缩,但是典型音频信号所代表的信号特征并不是最优的,也没有很好地适应人类听觉系统的具体要求。PCM数据量过大,造成存储和传输障碍。因此,需要使用相应的技术来降低数字信号源的数据速率,同时尽可能不对程序造成破坏,这就是所谓的压缩技术。

字符集编码

了解常见的编码特征是解决字符集编码问题的基础。字符集编码的识别与转换,各种乱码字符的成因分析,各种编码字符串的编程操作(如字符数计算、截断处理)都需要了解编码的特点。

理解一个字符集编码主要是理解编码的编码范围,编码对应的字符集(包含哪些字符),以及编码与其他字符集编码的关系。

美国信息交换标准代码

ASCII码为7位码,编码范围为0x00-0x7F。ASCII字符集包括英文字母、阿拉伯数字和标点符号。0x00-0x1F和0x7F中有33个控制字符。

仅支持ASCII的系统将忽略每个字节的最高有效位,仅将较低的7位视为有效位。HZ字符编码是一种早期的编码,设计用于在仅支持7位ASCII的系统中传输中文。很多早期的邮件系统只支持ASCII编码,所以传输中文邮件必须使用BASE64或其他编码方式

GB2312

GB2312是基于位置码设计的,将编码表分为94个区域,每个区域对应94位,区域码和每个字符的位置号的组合就是汉字的位置码。位置码一般用十进制数表示,例如1601表示16个区域,1位数字,对应的字符是“ah”。GB2312编码是通过将0xA0添加到区号和位置代码的编号中获得的。

01-09区域为符号和数字区域,16-87区域为汉字区域,10-15和88-94为未定义空白色区域。它将收集到的汉字分为两级:第一级是3755个常用汉字,放置在16-55区域,按照拼音字母/笔画的顺序排列;二级汉字是3008个常用汉字,放在56-87区域,以部首/笔画顺序排列。一级汉字是按照拼音排序的,所以我们可以在一级汉字位置得到某个拼音的范围。很多可以根据汉字得到拼音的程序就是根据这个原理编写的。

GB2312字符集包括希腊语字母、日语平假名和片假名字母、俄语西里尔字母等。除了常用的简体字,繁体字和一些生僻字不包括在内。繁体字可以用来测试某些系统是否只支持GB2312编码。

GB2312的编码范围是0xA1A1-0xFEFE,去掉未定义区域后可以理解为实际编码范围是0xA1A1-0xF7FE。

EUC-CN可以理解为GB2312的别名,和GB2312一模一样。

位置码应该看作是字符集的定义,定义了字符和字符位置,而GB2312和EUC-CN则是实际计算机环境中支持这个字符集的代码。HZ和ISO-2022-CN是本地码字符集对应的另外两个码,都使用7位码空支持汉字。位置代码和GB2312编码之间的关系有点像Unicode和UTF-8。

商业版

GBK编码是GB2312编码的超集,与GB2312向下完全兼容。同时,GBK在Unicode基本多语言平面中包含所有CJK汉字。和GB2312一样,GBK也支持希腊语字母、日语假名字母、俄语字母和其他字符,但不支持韩语中的拼音字符(非汉字)。GBK还包括中国部首符号、竖排标点符号和其他未包含在GB2312中的字符。

GBK的整个编码范围是0x8140-0xFEFE,不包括低位字节为0×7F的组合。高位字节范围为0×81-0xFE,低位字节范围为0x40-7E和0x80-0xFE。

低位字节为0x40-0x7E的GBK字符有一定的特殊性,因为这些字符占据了ASCII码的位置,会给一些系统带来麻烦。

在某些系统中,0x40-0x7E中的字符(如“|”)被用作特殊符号。在定位这些符号时,没有判断这些符号是否属于GBK字符的低位字节,这将导致错误的判断。支持GB2312的环境中不存在这个问题。应当注意,在支持GBK的环境中,小于0x80的字节不一定是ASCII符号;另外,最好使用小于0×40的ASCII符号作为一些特殊符号,这样就可以快速定位,而不用担心某个汉字的另一半。Big5编码也有相应的问题。

CP936和GBK有些不同。在大多数情况下,CP936可以被视为GBK的别名。

GB18030

GB18030代码向后兼容GBK和GB2312,这意味着不仅字符是兼容的,而且相同字符的代码也是相同的。GB18030包含Unicode3.1中的所有字符,包括中国少数民族字符、GBK不支持的朝鲜语字符等。也可以说包括了世界上大多数民族的文字和符号。

GBK和GB2312都是双字节等宽码,如果包含与ASCII兼容的单字节,可以理解为单字节和双字节的混合变长码。GB18030编码是变长编码,有单字节、双字节、四字节三种模式。

GB18030的单字节编码范围是0x00-0x7F,完全相当于ASCII。双字节编码范围与GBK相同,高字节编码范围为0x81-0xFE,0x40-0x7E和0x 80-FE;对于低字节。四字节编码中第一个和第三个字节的编码范围是0x81-0xFE,第二个和第四个字节是0x30-0x39。

在Windows中,CP936的代码页用0x80表示欧元符号,而在GB18030编码中,不使用0x80编码位,用其他位置表示欧元符号。这可以理解为GB18030向后兼容中的一个小问题;也可以理解为0x80是CP936到GBK的扩展,而GB18030只兼容GBK。

BIG5

Big5是双字节码,高字节码范围为0x81-0xFE,低字节码范围为0x40-0x7E和0xA1-0xFE。与GBK相比,低位字节是0x80-0xA0的组合。0x8140-0xA0FE是用户的文字创建区的保留区。

Big5收录的汉字只包括繁体字,不包括简体字,部分稀有汉字不包括在内。包括在GBK的日语假名字符和俄语字符Big5也不包括在内。因为Big5包含的字符有限,所以Big5上扩展了很多代码,比如永恒中文系统。Windows系统上使用的代码页CP950也可以理解为Big5的扩展,在Big5上增加了7个汉字和一些符号。Big5编码对应的字符集是GBK字符集的子集,这意味着Big5中包含的字符是GBK的一部分,但相同字符的编码不同。

由于Big5也占用ASCII编码空(低位字节使用0x40-0x7E),所以Big5编码在某些环境下存在与GBK编码相同的问题,即低位字节范围为0x40-0x7E的字符可能会被错误处理,尤其是低位字节为0x5C(& # 8221;/”)和0x7C(& # 8221;|”)字符。请参考GBK部分的相应描述。

虽然有一些区别,但在大多数情况下,CP950都可以看作Big5的别名。

国际标准化组织8859-1

ISO-8859-1编码为单字节编码,向后兼容ASCII,其编码范围为0x00-0xFF,0x00-0x7F与ASCII完全一致,0x80-0x9F为控制字符,0xA0-0xFF为文字符号。

除了ASCII中包含的字符外,ISO-8859-1中包含的字符还包括西欧语言、希腊语、泰语、阿拉伯语和希伯来语的对应字符。欧元符号出现较晚,未纳入ISO-8859-1。

因为ISO-8859-1的编码范围在单个字节中使用了all 空,所以支持ISO-8859-1的系统中任何其他编码字节流的传输和存储都不会被丢弃。换句话说,把其他任何编码的字节流都当作ISO-8859-1编码是没有问题的。这是一个非常重要的特性,MySQL数据库的默认代码是Latin1,它利用了这个特性。ASCII码是7位容器,ISO-8859-1码是8位容器。

Latin1是ISO-8859-1的别名,在某些环境下写成Latin-1。

UCS-2和UTF-16

Unicode和ISO组织都试图定义一个超大字符集,旨在覆盖所有语言中使用的字符和其他学科中使用的一些特殊符号。这个字符集叫做通用字符集(UCS)。两个组织已经协调好了,虽然都在按自己的方式发展,但是定义的人物立场完全一致。ISO 10646是国际标准化组织的相应标准。Unicode和ISO 10646都在不断发展的过程中,所以会有不同的版本号来表示不同的发展阶段,每个Unicode版本号都可以找到对应的ISO 10646版本号。

ISO 10646标准定义了31位字符集。前两个字节(0x0000-0xFFFD)的位置称为基本多语言平面(Basic Multilingual Plane,BMP),超出两个字节的范围称为辅助语言平面。BMP基本包含了所有语言中的大部分字符,所以只要支持BMP,大部分场合都可以使用。Unicode 3.0对应的是BMP范围内的一个字符集。

UCS字符集为每个字符指定一个位置,通常用“U”加上一个字符在UCS中位置的十六进制数作为这个字符的UCS表示,例如“U+0041”表示字符“a”。UCS字符U+0000到U+00FF完全符合ISO-8859-1。

UCS-2和UTF-16是UCS字符集(或Unicode字符集)在实际应用中的具体编码方式。UCS-2是等宽的双字节码,因为只使用了双字节码空,所以只能对BMP中的字符进行编码。UTF-16是变长编码,在BMP中用两个字节编码字符,在BMP之外用四个字节编码辅助平面的字符。

UCS-2不同于GBK和Big5。这是真正的等宽编码,每个字符使用两个字节。这个特性对于字符串截断和字符数计算非常方便。

UTF-16是UCS-2的超集,UTF-16的双字节编码方式与UCS-2完全相同,这意味着UCS-2在BMP的框架内完全等同于UTF-16。在实践中,UCS-16常被认为是UCS-2的别名。

UCS-2和UTF-16在存储和传输中使用两种不同的字节序列,即大端和小端。例如,“ah”(U+554 a)表示大端字节序的0x554A,小端字节序的0x4A55。UCS-2和UTF-16的默认字节顺序是大端模式。在传输过程中,为了说明字节顺序,需要在字节流前添加BOM(字节顺序标记),其中0xFEFF表示大端,0xFFFE表示小端。UCS-2BE和UCS-2LE是实际应用中使用的编码名,对应大端和小端,还有UTF-16BE和UTF-16LE。因为默认是BE字节顺序,所以UCS-2可以看作是UCS-2BE的别名。

UCS编码中有一个字符叫“零宽度无间断空间”,它的编码是U+FEFF,这是一个没有实际意义的字符。UCS规范建议我们在传输字节流之前传输字符“零宽度无中断空间”。如果传输的零宽度无中断空间为0xFEFF,则表示大端序,否则表示小端序。

UCS-2和UTF-16也可以理解为兼容ASCII和ISO-8859-1,相应字符的UCS-2编码可以通过在ASCII编码或ISO-8859-1编码的每个字节前加0x00得到。

在UCS-2和UTF-16中,0x00作为某个字符编码的一部分,有些系统使用0x00作为字符串末尾的符号,因此在处理UCS-2或UTF-16编码时会出现问题。

UTF-8

UTF-8是UCS字符集的另一种编码方法。UTF-16的每个单位是两个字节(16位),而UTF-8的每个单位是一个字节(8位)。在UTF-16中,一个字符由一个或两个双字节表示,在UTF-8中,一个字符由一个或几个单字节表示。

可以认为,UTF-8编码是从UCS-2按照一定规则转换而来的,UCS-2和UTF-8之间存在如下转换关系:

UCS-2 UTF-8

u+0000 & # 8211;U+007F 0xxxxxxx

u+0080 & # 8211;u+07FF 110 xxxx 10 xxxxx

u+0800 & # 8211;u+FFFF 1110 XXX 10 xxxxx 10 xxxxx

例如,单词“ah”的UCS-2编码是0x554A,对应的二进制是0101 0101 0100 1010,UTF-8编码后的二进制是1110 0101 10 0101 10 001010,对应的十六进制是0xE5958A。

UCS-4也是UCS字符集的一种编码方式,采用4字节等宽编码。UCS-4可以用来表示BMP以外的辅助人脸字符。BMP字符的UCS-4编码是在UCS-2中每两个字节前加0x0000得到的。从UCS-4到UTF-8也有转换关系。根据这种转换关系,UTF-8可以使用多达六个字节来编码UCS-4。

根据UTF-8的生成规律和UCS字符集的特点,我们可以看到UTF-8的特点:

UTF-8与ASCII完全兼容,这意味着ASCII对应的字符与UTF-8中的ASCII编码完全一致。0x00-0x7F范围内的字符必须是ASCII字符,不能是其他字符的一部分。UTF-8不存在GBK和Big5的缺陷。

大于U+007F的UCS字符在UTF-8编码中至少是两个字节。

UTF-8中每个字符的第一个字节总是在0x00和0xfd之间(不管UCS-4支持,第一个字节在0x00和0xef之间)。根据第一个字节,可以判断后面连续的字节。

第一个字节以外的其他字节在0x80和0xbf之间;0xFE和0xFF不用于UTF-8。

UCS-2中GBK编码的汉字范围为U+0800 & # 8211;U+FFFF,所以每个GBK编码中汉字的UTF-8编码是3字节。但是,GBK包含的其他字符的UTF-8编码不一定是3字节,例如GBK的俄语字符。

即使在UTF-8编码的传输过程中丢失了一个字节,也很容易根据编码规则定位丢失的位置,不会影响其他字符。在其他双字节编码中,一旦一个字节丢失,该字节之后的所有字符都会受到影响。从这一点可以看出,UTF-8编码非常适合作为传输编码。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 编码方式是什么

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情