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

有帮助吗?

解决方案

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

移-JIS,JIS,EUC-JP,EUC-KR,与中国编码通常包括沿

大多数传统编码的,但有一些例外,需要一种状态机模型(或更简单地说,一个页面交换模型)来处理,并在文本流向后移动的复杂且容易出错。 UTF-8和UTF-16不存在这个问题,因为UTF-8可以与一个位掩码和UTF-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。

其中你不所有字符集有一个1个字节= 1字符映射。所有Unicode变体,而且亚洲字符集是多字节。

有关的更多信息,我建议读此维基百科文章

多字节字符是指其编码需要超过 1 个字节的字符。但这并不意味着使用该特定编码的所有字符都将具有相同的宽度(以字节为单位)。例如:UTF-8 和 UTF-16 编码字符有时可能使用多个字节,而 全部 UTF-32 编码字符 总是 使用 32 位。

参考:

通常是前者,即UTF-8等。对于更多的信息,请参见可变宽度编码

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

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

  

一个多字节字符集可以包括一个两字节和两个字节的   字符。因此,一个多字节字符的字符串可能包含的混合物   单字节和双字节字符。

价:单字节和多字节字符集

UTF-8是多字节,这意味着每个英文字符(ASCII)被存储在1个字节,而非英文字符像中国,泰国,被存储在3个字节。当你用英文混合中国/泰国语,如“ทT”,泰国第一字符“ท”使用3个字节,而第二个英文字母“T”只使用1个字节。谁设计多字节编码人意识到,英语字符不应该被存储在3个字节,而它可以容纳在1个字节由于存储空间的浪费。

UTF-16中存储的每个字符英语或非英语在固定2字节长度,所以它不是多字节但称为宽字符。这是非常适合中国/泰语其中每个字符在2个字节完全适合但印刷为UTF-8控制台输出通过使用函数wcstombs()需要从宽字符到多字节格式转换。

UTF-32存储每个字在一个固定的4字节长度,但没有人用它来存储字符由于存储空间的浪费。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top