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

7

我参加了一场关于XML的演讲,其中提到“ISO-8859-1是Unicode格式”。这听起来不太对,但是当我研究它时,我很难准确理解什么是Unicode。

你能称ISO-8859-1为Unicode格式吗?实际上你能称什么为Unicode呢?

5个回答

16

ISO 8859-1不是Unicode

ISO 8859-1也被称为Latin-1,它不是一个直接的Unicode格式。

然而,它有独特的特权,即其代码点0x00 .. 0xFF与Unicode代码点U+0000 .. U+00FF一一映射。因此,Unicode的前256个代码点(视为1字节无符号整数)映射到ISO 8859-1。


控制字符

Peregring-lk观察到,ISO 8859-1没有定义控制码。Unicode图表U+0000..U+007FU+0080..U+00FF表明,在位置U+0000..U+001F和U+007F中找到的C0控制码来自ISO/IEC 6429:1992,而在位置U+0080..U+9F中找到的C1控制码同样如此。维基百科关于C0和C1控制码的文章表明标准是ISO/IEC 2022。请注意,其中三个C1控制码没有正式名称。

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


2
因此,ISO-8859-1很容易在代码中被“意外”使用,而不是执行适当的字符集转换,这是由于在byte和(宽)char之间进行强制转换。 - dan04
2
这是错误的。ISO-8859-1不包含Unicode范围内0x00 - 0xFF之间存在的任何控制字符。 - ABu

12

ISO-8859-1包含UTF-8 Unicode的一个子集,其很大程度上与ASCII重叠。

所有的ASCII都是UTF-8 Unicode。

所有低于7f十六进制编码的ISO 8859-1(ISO Latin 1)字符都与ASCII兼容,并且在一个字节中与UTF-8兼容。带有连字号和变音符号的字符使用多字节Unicode UTF-8表示,并使用Unicode 兼容性代码点

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

UTF-8还包含多字节序列,其中一些是可排序等价物 - 组成等价物 - 这些等价物由兼容性代码点表示,而其他字符集除了ASCII和ISO Latin 1之外的所有字符集则表示为某些字符。

输入图像描述


2
这个答案是误导性的,因为(特别是维恩图)它暗示ISO 8859-1是UTF-8的子集。如果是这样的话,那么一个ISO-8859-1编码的文件将作为UTF-8有效/可读(实际上并不是这样)。的确,“codepoints” ISO-8859-1(实际上不是ISO 8859-1的东西)是Unicode codepoints的子集,但这仅涉及数字,而不是具体的字符集编码(UTF-8是一种具体的编码)。 - leonbloy

9
不,ISO 8859-1不是Unicode字符集,因为ISO 8859-1并未对所有Unicode字符提供编码,而只提供了其中的一小部分。 “charset”这个词有时会被宽泛使用(因此最好避免使用),但作为技术术语,它意味着字符编码。
将定义放松,使“Unicode字符集”表示涵盖部分Unicode的编码是毫无意义的。然后每个编码都将成为“Unicode字符集”。

2

ISO/IEC 8859-1不如Unicode先进,例如其中找不到€。 Unicode兼容ISO 8859-1到某种程度。有关Unicode中字符编码的内容,请参阅UCS / UTF8 / UTF16。

如果您查看代码格式,则会发现以下内容:

  • 抽象字母 - 您使用的字母
  • 代码表 - 将字母以某种形式放入其中(例如按字母顺序排列)
  • 代码格式 - 声明代码表中哪个位置是哪个字母(即UTF8或UTF16编码)
  • 代码方案 - 如果您使用更多单词来访问代码位置,它们的顺序是什么? (在UTF16中使用Big Endian,Little Endian)[转向指令的字符编码(例如XML中的<)]

ISO/IEC 8859-1 没有 €,但 8859-15 有。 - Jonathan Leffler

1

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

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

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

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

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

在这里,您可以找到更完整的答案:Unicode.org


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接