1.
UTF-32在UTF目前常用的三种编码方式(UTF-8、UTF-16、UTF-32)中,是最为简单的一种编码方式。UTF-32编码方式不使用任何编码算法将Unicode字符码点值(即编号字符集CCS中的字符编号)转换为码元序列,而是将每个Unicode字符码点值直接表示为一个32位的码元序列。
因此,目前UTF-32是一种固定宽度(也称为等宽、等长或定长)码元序列的Unicode字符编码方式。
2.
UTF-32中的码元由32位组成。UTF-32使用的32位码元足够大,目前Unicode字符集中所收录的每个字符的码点值都可直接映射为单个码元。
换言之,UTF-32使用一个32位的码元序列来表示Unicode字符(严格地说,是单个32位的码元,并没有形成两个或两个以上码元所组成的码元序列,除非未来Unicode码点值扩展到64位,这样才可能出现由两个32位的码元所组成的序列)。
因此,即使是ASCII字符,同样需要占用32位(即四个字节)。这在三大UTF编码方式中无疑是最为浪费存储空间的;不过,由于UTF-32是定长编码(UTF-8和UTF-16都是变长编码),因此在文本处理速度上又是三大UTF编码方式中最快的。
(笨笨阿林原创文章,转载请注明出处)
3.
由于UTF-32直接以四个字节的码元来表示码点值,这样按目前的情况来看,UCS-4或Unicode增补平面SP中的所有码点值就都可以完全直接表示,而无需像UTF-16那样使用复杂的代理算法来间接表示。
当然,如前所述,Unicode字符集是一个在不断增加字符的开放字符集,如果未来Unicode字符集的字符编号(即码点值)超过了四个字节,则UTF-32可能也需要像UTF-16一样使用某种特殊编码算法来间接表示。不过,按目前情况来看,真到了那一天,UTF-32编码方式可能也已经完全淘汰了。
4.
与UTF-16类似,作为逻辑意义上的UTF-32码元序列,由于历史的原因,在映射为物理意义上的字节序列时,也分为UTF-32BE大端序、UTF-32LE小端序两种编码模式,因此UTF-32也同样需要使用BOM。
比如,“ABC”这三个字符的UTF-32码元序列为:00 00 00 41 00 00 00 42 00 00 00 43;其对应的各种字节序列如下:
每个UTF-32码元的值与Unicode码点的值完全相同,但其字节序列因字节序的不同而表现为有相同也有不同。
5.
由于UTF-32在三大UTF编码方式中,既不是最早推出的编码方式(最早推出的是UTF-16),也不是最优设计的编码方式(公认为最优设计的是UTF-8),因此在实践中使用得最少,目前几乎已处于淘汰状态。
(笨笨阿林原创文章,转载请注明出处)