术语多字节是指字符可以 - 但不必是 - 比1字节宽(例如UTF-8)的字符集,还是指在任何情况下都大于1字节的字符集例如UTF-16)?换句话说:如果有人谈论多字节字符集是什么意思?什么是多字节字符集?
回答
术语是模糊的,但在我的国际化工作中,我们通常避免术语 “多字节字符集” 来指代转换为基于Unicode的编码。一般来说,我们只使用这个术语用于遗留编码方案,该编码方案有一个或多个字节来定义每个字符(不包括每个字符只需要一个字节的编码)。
通常包括Shift-jis,jis,euc-jp,euc-kr以及中文编码。
除了一些例外,大多数遗留编码需要一种状态机模型(或者更简单地说,一个页面交换模型)来处理,并且在文本流中向后移动很复杂并且容易出错。 UTF-8和UTF-16不会遇到这个问题,因为UTF-8可以用位掩码来测试,而UTF-16可以针对一系列代理对进行测试,因此可以在非病态文档中向前和向后移动安全地完成没有大的复杂性。
对于像泰语和越南语这样的语言,一些遗留编码具有多字节字符集的一些复杂性,但实际上只是将字符组合在一起,并且通常不会泛泛地使用广义术语“多字节”。
通常,前者即UTF-8。有关更多信息,请参见Variable-width encoding。
前者 - 尽管术语“可变长度编码”更合适。
我通常用它来指代任何字符,可以每个字符有多个字节。
所有你没有1字节= 1字符映射的字符集。所有Unicode变体,而且亚洲字符集都是多字节。我们建议您阅读this Wikipedia article。
多字节字符将表示其编码需要多于1个字节的字符。但这并不意味着使用该特定编码的所有字符将具有相同的宽度(以字节为单位)。例如:UTF-8和UTF-16编码字符有时可能使用多个字节,而全部为 UTF-32编码字符总是使用32位。
参考文献:
如果有人谈论多字节字符集是什么意思?
像往常一样,这取决于谁在说话!
逻辑上,它应该包括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. 什么是当前现代术语“多字节字符集”
- 2. 为什么在单字节字符集系统中不能存储多个字节字符?
- 3. 这是什么语言/字符集?
- 4. 什么是二进制字符集?
- 5. 什么是默认的VB6字符集?
- 6. 字符集什么错?
- 7. 这些字节是什么?
- 8. 什么是活字节?
- 9. 什么是ILLegal字节码?
- 10. 字符文字中的字符太多错误是什么
- 11. 什么是HTTP标头?什么是字符集?
- 12. 什么是MySQL varbinary字符串解释的默认字符集?
- 13. 是字符串(字节[],字符集)存储器高效
- 14. 什么宽字符转换为空多字节?
- 15. unicode字符或多字节字符:哪种类型更有效?为什么?
- 16. 多字符集
- 17. 在PHP中引用多字节字符串的最简单方法是什么?
- 18. 字符后面的字符是什么?
- 19. 脱字符(^)字符是什么意思?
- 20. 字符'0x8'这是什么字符?
- 21. 为什么MongoDB.Bson.BsonExtensionMethods.ToBson返回字节数组而不是字符串?
- 22. 什么是所有的语言使用双字节字符?
- 23. Java字符串中负字节值的意义是什么?
- 24. 什么是等于00000000字节的字符?
- 25. 为什么sizeof字符常量是4个字节?
- 26. 在ASCIIEncoding.GetString(byte [])之后表示空字节的字符是什么?
- 27. 为什么java中的字符大小是2个字节?
- 28. 多字节的UTF8字符
- 29. 宽字符为多字节
- 30. MySQL的多字节字符