Answers:
每种编码都有与之关联的特定字符集,但是给定字符集可以有多个编码。字符集就是听起来像的一组字符。有很多字符集,包括许多专用于特定脚本或语言的字符集。
但是,我们在向Unicode过渡的过程中进展顺利,其中包括一个能够代表几乎所有世界脚本的字符集。但是,Unicode有多种编码。编码是将字符串字符串映射为字节字符串的一种方式。Unicode编码的示例包括UTF-8,UTF-16 BE和UTF-16 LE。对于特定的应用程序或机器体系结构,每种方法都有其优势。
除了其他答案外,我认为这篇文章也是不错的阅读 http://www.joelonsoftware.com/articles/Unicode.html
这篇文章的标题是Joel Spolsky撰写的 “ 绝对是每个软件开发人员的绝对最低限度,肯定是他们必须完全了解Unicode和字符集(无借口!) ” 。这篇文章已有10多年的历史了,但是(不幸的是)内容仍然有效...
字符编码包括:
步骤#1本身就是一个“字符库”或抽象的“字符集”,而#1 +#2 =一个“编码字符集”。
但是在Unicode流行之前,每个人(东亚除外)都使用单字节编码,第3步和第4步很简单(代码点=代码单位=字节)。因此,较旧的协议没有明确区分“字符编码”和“编码字符集”。较旧的协议charset
在真正表示编码时使用。
希望为以后访问的人们提供更多的机会,希望对您有所帮助。
每种语言都有字符,这些字符的集合构成该语言的“字符集”。对字符进行编码后,会为其分配一个唯一的标识符或一个称为代码点的数字。在计算机中,这些代码点将由一个或多个字节表示。
字符集示例: ASCII(覆盖所有英文字符),ISO / IEC646,Unicode(覆盖世界上所有活泼语言的字符)
编码字符集是为每个字符分配唯一编号的集合。该唯一编号称为“代码点”。
编码字符集有时称为代码页。
编码是一种将代码点映射到一些字节的机制,以便可以使用相同的编码方案在不同的系统上均匀地读写字符。
编码示例: ASCII,Unicode编码方案,例如UTF-8,UTF-16,UTF-32。
09 15
使用UTF-16编码时将由两个字节()表示 FC
而在“ UTF-8”中则表示为,C3 BC
而在UTF-16中表示为FE FF 00 FC
。09 15
)时将由两个字节表示,对于UTF-8(E0 A4 95
)将由三个字节表示,而对于UTF-32 将由四个字节表示(00 00 09 15
)字符集或字符库仅仅是字符集(无序集合)。编码字符集为曲目中的每个字符分配一个整数(“代码点”)。编码是将代码点明确表示为字节流的一种方式。
用谷歌搜索。 http://en.wikipedia.org/wiki/Character_encoding
差异似乎很细微。字符集一词实际上不适用于Unicode。Unicode经历了一系列抽象。抽象字符->代码点->代码点的编码为字节。
字符集实际上跳过了这一步,直接从字符跳到字节。字节序列<->字符序列
简而言之,编码:代码点->字节字符集:字符->字节
一个字符集只是一个集合。它要么包含例如欧元符号,要么不包含。就这样。
编码是从字符集到整数集的双射映射。如果支持欧元符号,则必须为该字符分配一个特定的整数,而不能分配其他整数。
编码是字符集中字节和字符之间的映射,因此,讨论和理解字节和字符之间的区别将很有帮助。
可以将字节视为介于0到255之间的数字,而字符是抽象的东西,例如“ a”,“ 1”,“ $”和“Ä”。可用的所有字符集称为字符集。
每个字符都有一个或多个用于表示它的字节序列。但是,字节的确切数量和值取决于所使用的编码,并且有许多不同的编码。
大多数编码基于旧字符集和称为ASCII的编码,ASCII是每个字符一个字节(实际上只有7位),包含128个字符,其中包括许多美国英语中常用的字符。
例如,这是ASCII字符集中的6个字符,由值60到65表示。
Extract of ASCII Table 60-65
╔══════╦══════════════╗
║ Byte ║ Character ║
╠══════╬══════════════║
║ 60 ║ < ║
║ 61 ║ = ║
║ 62 ║ > ║
║ 63 ║ ? ║
║ 64 ║ @ ║
║ 65 ║ A ║
╚══════╩══════════════╝
在完整的ASCII集中,使用的最小值是0,最大值是127(这两个都是隐藏的控制字符)。
但是,一旦您开始需要比基本ASCII所提供的字符更多的字符(例如,带有重音符号的字母,货币符号,图形符号等),则ASCII不适合,并且您需要更广泛的内容。您需要更多的字符(不同的字符集),并且需要不同的编码,因为128个字符不足以容纳所有字符。某些编码提供一个字节(256个字符)或最多六个字节。
随着时间的流逝,已经创建了许多编码。在Windows世界中,有CP1252或ISO-8859-1,而Linux用户倾向于使用UTF-8。Java本机使用UTF-16。
一个编码中一个字符的一个字节值序列可能代表另一编码中一个完全不同的字符,甚至可能无效。
例如,在ISO 8859-1中,â由一个字节的value表示226
,而在UTF-8中则由两个字节表示:195, 162
。但是,在ISO 8859-1中,195, 162
将是两个字符Ã,¢。
当计算机在内部存储有关字符的数据或将其传输到另一个系统时,它们将存储或发送字节。想象系统打开文件或接收消息时看到字节195, 162
。它怎么知道这些是什么字符?
为了使系统将这些字节解释为实际字符(并显示它们或将其转换为另一种编码),它需要知道所使用的编码。这就是为什么编码出现在XML标头中或可以在文本编辑器中指定的原因。它告诉系统字节和字符之间的映射。