什么是Unicode表中XXX指示器的含义?

3
考虑Unicode Charts中C1控制字符和Latin-1补充的unicode图表。如果一个字符有字形,它会被显示出来;如果没有字形,则会给出特殊的点线和符号标记或标识符。在这种情况下,0080和0081似乎都有一些“无效标记”,我认为这就是“XXX”的含义。这是它的含义吗?

enter image description here

其次,如果一个Unicode感知的字符串类型中存储了值为0x80(十六进制)或128(十进制)的字符串,它应该如何表现?是否应将其转换为其他点,例如以下映射:
- 许多ANSI代码页中的字节值128是欧元标记。 - 存储128的十进制值等同于存储U+20AC?
我在特定语言或操作系统API实现的MBCS和Unicode类型以及Java的有趣处理中遇到的神奇“非正交性”让我想知道U+0080字符的真正预期用途是什么。这个参考链接让我困惑,因为它显示Java将此字符视为欧元符号(ANSI代码页到Unicode的单向友好性),但它的名称是<control>,这不是我知道如何处理的任何内容。维基百科说它是PAD 这里

有人能帮我吗?我在Unicode学校跳过了基础概念日吗?我错过了什么?

更新 从0080到0098的块是不可打印的控制字符。这一点我知道。我想知道的是XXX是什么意思,当我处理具有该值的Unicode数据时,我应该如何考虑此字符?


2
它的意思很简单,就是“未分配”。一个合适的Unicode解码器应该用U+FFFD替换它们。 - Hans Passant
@HansPassant:但是 U+0080 和 U+0081 代码点确实已被分配给没有名称的字符。 - dan04
嗯,那种角色通常不穿衣服。 - Hans Passant
为什么有人投票将其关闭为离题?Unicode定义以及在Unicode感知应用程序中处理这些定义如何是离题的? - Warren P
1个回答

5
根据Unicode标准第17章(关于代码图表)的解释,第573页,“虚线框约定”表示没有可见渲染的字符“由一个方形虚线框表示。该框围绕着字符名称的简短助记符。”问题中提到的字符是控制字符,在C1控制区域。
Unicode标准在第16章第544页有关C0和C1控制字符的说明:“Unicode标准提供了这些码点的完整交换,既不增加也不减少它们的语义。控制字符的语义通常由使用它们的应用程序确定。然而,在没有特定应用用途的情况下,它们可以按照ISO/IEC 6429:1992中指定的控制函数语义进行解释。”而方形虚线框中的缩写反映了ISO/IEC 6429:1992中给出的含义。
C1控制字符区域中的一些代码点在ISO/IEC 6429:1992中未被定义。对于它们,例如U+0080,在助记符缩写的位置上,代码图表中有“XXX”。因此,这表明Unicode标准没有提到这些代码点的任何含义,除了它们作为具有某些抽象属性的控制字符。
因此,“XXX”并不意味着“无效”,而是“完全未定义的含义”。这些代码点的含义可以由各种标准或其他约定来定义,只要它们与一般定义相一致——例如,将U+0080定义为图形字符是不兼容的。
在任何字符级处理中都不能替换或省略这样的代码点;实际更改数据的应用程序可能会执行任何操作,但是任何通用转换例程(例如)必须保持这些代码点(字符)完整。它们不得被视为格式错误或无效;但是应用程序可以将它们视为未定义。按照Unicode原则,对于一个字符的无知是可以的,但是完全错误是不可以的。
这与8位编码(如Windows-1252)中0x80等字节的含义无关。但如果您发送标记为ISO-8859-1编码的数据(其中0x80在原则上是U+0080)到Web浏览器,则实际上会将其视为Windows-1252编码。原因是像U+0080这样的字符在ISO-8859-1数据中实际上几乎从未使用;在ISO-8859-1标记的数据中,0x80的出现几乎总是windows-1252标错或混乱无法有意义地处理的数据。因此,浏览器采取了实用路线,将ISO-8859-1视为windows-1252;这已在HTML5和相关规范中得到正式确认。

0x81字节怎么办?它既不被ISO-8859-1也不被Windows-1252定义。(我之所以询问是因为在现实世界的用户输入中遇到了这个问题。)我唯一找到的描述是“高位预设(HOP)”——无论那是什么意思。 - Mikko Rantalainen
0x81 在 Windows-1252 中未定义,而在 ISO-8859-1 中保留为控制码。其区别在于 Windows-1252 可以通过将图形字符指定为 0x81 来进行扩展,而 ISO-8859-1 则不行。对于 C1 控制(0x80 至 0x9F)的各种控制码分配,但通常不会定义 0x81。它实际上是一个未使用的位置。这意味着,如果您在假定为某些8位编码中的字符的数据流中遇到它,则表示存在某种数据错误。 - Jukka K. Korpela

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