字符集和字符编码有什么区别

时间:2010-03-18 11:30:00

标签: unicode character-encoding

字符集和字符编码有什么区别?当我说我使用utf-8编码时,那将是我的字符集?默认情况下是否将unicode作为charset?

5 个答案:

答案 0 :(得分:4)

UTF-8是Unicode字符集的编码。因此,如果您使用的是UTF-8,则字符集是Unicode,但您不必在任何地方单独指定。 Unicode的另一个主要编码是UTF-16,它不包含在8位字节流中,因为它包含零字节。如果您在字节序列中处理Unicode,它肯定编码为UTF-8。

除了Unicode之外,字符集通常被认为具有单个固定编码,然后字符集,字符集,代码页,编码等术语通常可互换使用,或者取决于供应商。这很草率但不会产生运行时问题。

我能想到的唯一可能的例外是东亚:JIS和EUC最初为同一字符集定义了多种编码,但在今天的实践中,每种编码都是单独处理的。

答案 1 :(得分:3)

字符集:定义哪个字符具有哪个数字代码点(ascii,jis,unicode)

编码:定义数字代码点的物理表示方式(utf,ucs,shiftjis)

答案 2 :(得分:2)

根据Unicode terminology

  • ACR:抽象角色曲目       =要编码的字符集,例如,某些字母或符号集
  • CCS:编码字符集       =从抽象字符库到一组非负整数的映射
  • CEF:字符编码表格       =来自一组非负整数的映射,这些整数是a的元素 CCS到一组指定宽度的特定代码单元序列,例如32位整数
  • CES:字符编码方案       =从一组代码单元序列(从一个或多个CEF到一个序列化的字节序列)的可逆转换
  • CM:角色地图       =从抽象字符库的成员序列映射到在单个操作中桥接所有四个级别的序列化字节序列
  • TES:传输编码语法       =编码数据的可逆变换,可能包含也可能不包含文本数据

像MIME这样的旧协议使用“charset”时,它们实际上是指“字符编码方案”。最初,不同的字符编码虽然是独立的字符集,而不是Unicode的子集。

答案 3 :(得分:0)

字符集定义数字和字符之间的映射。几乎所有的字符集都说65是A,并且一般都同意数字到127的映射。但是当它涉及127以上的数字时,它们可能有不同的立场。

有很多字符集

  • EBCDIC
  • 双字节字符集
  • ANSI
  • 不同的OEM字符集
  • Unicode,努力创造一个包含地球上所有合理书写系统的单一字符集,以及像Klingon这样的一些虚构字符集。

当你说字符编码时,你在谈论如何在内部存储Unicode代码点(字符)。

  • 在UTF-8编码中,0-127的每个代码点都存储在一个字节中。仅使用2,3存储代码点128及以上,实际上最多6个字节。
  • 有一种称为UTF-7的东西,它与UTF-8非常相似,但保证高位始终为零
  • 有数百种传统编码只能正确存储一些代码点,并将所有其他代码点更改为问号。一些流行的英文文本编码是Windows-1252(适用于西欧语言的Windows 9x标准)和ISO-8859-1,也称为Latin-1(也适用于任何西欧语言)。
  • UTF 7,8,16和32都具有能够正确存储任何代码点的良好属性。

这篇文章几乎完全基于Joel Spolsky关于Unicode的帖子:The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets。阅读它以获得更好的主意。

答案 4 :(得分:-2)