ISO-8859-1是Unicode字符集吗?

ISO-8859-1是Unicode字符集吗?,unicode,character-encoding,iso-8859-1,Unicode,Character Encoding,Iso 8859 1,我参加了一个关于XML的讲座,讲稿是“ISO-8859-1是一种Unicode格式”。对我来说这听起来是错误的,但当我研究它时,我很难准确地理解Unicode是什么 你能称ISO-8859-1为Unicode格式吗?你到底能把Unicode称为什么?不。ISO/IEC 8859-1比Unicode早。例如,你在里面找不到欧元。Unicode在某种程度上与ISO 8859-1兼容。有关Unicode中字符的编码,请参阅UCS/UTF8/UTF16 如果你看一下代码格式,你会发现 抽象字母-您正在

我参加了一个关于XML的讲座,讲稿是“ISO-8859-1是一种Unicode格式”。对我来说这听起来是错误的,但当我研究它时,我很难准确地理解Unicode是什么


你能称ISO-8859-1为Unicode格式吗?你到底能把Unicode称为什么?

不。ISO/IEC 8859-1比Unicode早。例如,你在里面找不到欧元。Unicode在某种程度上与ISO 8859-1兼容。有关Unicode中字符的编码,请参阅UCS/UTF8/UTF16

如果你看一下代码格式,你会发现

  • 抽象字母-您正在使用的字母
  • 代码表-以某种形式输入字母(如字母顺序)
  • 代码格式-说明代码表中的哪个位置是哪个字母(即UTF8或UTF16编码)
  • 代码模式-如果您使用更多的单词访问代码位置,它们的顺序是什么?(UTF16中的大端、小端) [转向指令的字符编码(例如<在XML中)]
ISO 8859-1不是Unicode 也被称为拉丁语-1。它不是一种直接的格式

但是,它确实具有代码指向0x00的唯一权限。。0xFF将一对一映射到Unicode代码点。因此,Unicode的前256个代码点被视为1字节无符号整数,映射到ISO 8859-1


控制字符 ISO 8859-1未定义控制代码。Unicode图表表明,位于U+0000..U+001F和U+007F位置的C0控件来自ISO/IEC 6429:1992,而位于U+0080..U+9F位置的C1控件同样来自ISO/IEC 6429:1992。维基百科上的建议标准是ISO/IEC 2022。请注意,C1控件中有三个没有正式名称


一般来说,ISO 8859-1代码集的控制代码点被假定为来自ISO 6429(或2022)的C0和C1控件。

不,ISO 8859-1不是Unicode字符集,只是因为ISO 8859-1没有为所有Unicode字符提供编码,只是其中的一小部分。“字符集”这个词有时使用得很松散(因此通常最好避免使用),但作为一个技术术语,它意味着字符编码


放松定义,使“Unicode字符集”意味着覆盖部分Unicode的编码将毫无意义。然后,每个编码都将是“Unicode字符集”。

这取决于您如何定义“Unicode格式”

我想大多数人都会认为这是一种能够表示Unicode范围内任何代码点(U+0000-U+10FFFF)的编码

在这种情况下,ISO 8859-1不是Unicode格式

然而,其他一些定义可能是“作为Unicode字符集子集的字符集”或“可被视为包含Unicode数据(不一定是任意Unicode数据)的编码”。ISO 8859-1满足这两个定义

Unicode是一系列的东西。它包含一个字符集,其中“字符”被指定为代码点值。它定义字符的属性,并提供字符及其属性的数据库。它定义了许多用于处理Unicode文本数据的算法,例如比较字符串的方法、将字符串划分为图形集簇、单词等。它定义了一些特殊的编码,可以对任何Unicode码点进行编码,并具有一些其他有用的属性。它定义Unicode代码点和遗留字符集的代码点之间的映射


在这里您可以找到一个更完整的答案:

ISO-8859-1包含UTF-8 Unicode的子集,它与ASCII基本重叠

所有ASCII都是UTF-8 Unicode

代码7f hex下的所有ISO 8859-1(ISO拉丁语1)字符在一个字节内兼容ASCII和UTF-8。带有变音符号的连字和字符使用多字节Unicode UTF-8表示,并使用Unicode兼容码点

所有UTF-8单字节字符都包含在ASCII中

UTF-8还包含多字节序列,其中一些是由兼容代码点表示的字符的可折叠(即可排序)等价物(组合等价物),一些是由除ASCII和ISO拉丁1以外的所有其他字符集表示的字符


正因为如此,ISO-8859-1很容易在
字节
和(宽)
字符
之间转换的代码中“意外”使用,而不是执行正确的字符集转换。这是错误的。ISO-8859-1不包含范围为0x00-0xFF的Unicode中存在的任何控制字符。ISO/IEC 8859-1没有欧元,但8859-15有欧元。