2009-04-14 61 views
31

术语多字节是指字符可以 - 但不必是 - 比1字节宽(例如UTF-8)的字符集,还是指在任何情况下都大于1字节的字符集例如UTF-16)?换句话说:如果有人谈论多字节字符集是什么意思?什么是多字节字符集?

回答

29

术语是模糊的,但在我的国际化工作中,我们通常避免术语 “多字节字符集” 来指代转换为基于Unicode的编码。一般来说,我们只使用这个术语用于遗留编码方案,该编码方案有一个或多个字节来定义每个字符(不包括每个字符只需要一个字节的编码)。

通常包括Shift-jis,jis,euc-jp,euc-kr以及中文编码。

除了一些例外,大多数遗留编码需要一种状态机模型(或者更简单地说,一个页面交换模型)来处理,并且在文本流中向后移动很复杂并且容易出错。 UTF-8和UTF-16不会遇到这个问题,因为UTF-8可以用位掩码来测试,而UTF-16可以针对一系列代理对进行测试,因此可以在非病态文档中向前和向后移动安全地完成没有大的复杂性。

对于像泰语和越南语这样的语言,一些遗留编码具有多字节字符集的一些复杂性,但实际上只是将字符组合在一起,并且通常不会泛泛地使用广义术语“多字节”。

2

前者 - 尽管术语“可变长度编码”更合适。

1

我通常用它来指代任何字符,可以每个字符有多个字节。

5

所有你没有1字节= 1字符映射的字符集。所有Unicode变体,而且亚洲字符集都是多字节。我们建议您阅读this Wikipedia article

16

如果有人谈论多字节字符集是什么意思?

像往常一样,这取决于谁在说话!

逻辑上,它应该包括UTF-8,Shift-JIS,GB等:可变长度编码。在这个组中通常不会考虑UTF-16(尽管它的类型是什么,代理是什么;当通过UTF-16LE/UTF-16BE编码成字节时,它肯定是多个字节)。

但是在Microsoftland中,这个术语通常用来表示一个可变长度的默认系统代码页(对于遗留的非Unicode应用程序,其中仍然有很多)。在此用法中,不能包含UTF-8和UTF-16LE/UTF-16BE,因为Windows上的系统代码页不能设置为这两种编码之一。事实上,在某些情况下,“mbcs”不过是系统代码页的同义词,或者以“ANSI”的名称(甚至更具误导性)已知。在这种情况下,“多字节”字符集实际上可能与西欧的cp1252一样微不足道,它只使用每个字符一个字节!我的建议:当你的意思是使用“可变长度”,并避免含糊不清的术语“多字节”;当其他人使用它时,你需要澄清,但通常有Windows背景的人会谈论传统的东亚代码页,如cp932(Shift-JIS),而不是UTF。