33

U+001A 字符经常出现在与字符编码相关的错误消息中。什么是 U+001A 字符?

4

3 回答 3

24

U+001A 在 Unicode 标准中被定义为一个名为 SUBSTITUTE 的控制字符,它属于一个特征如下的组,在该标准的第 16 章中:“Unicode 标准中留出了 65 个代码点以兼容ISO/IEC 2022 框架中定义的 C0 和 C1 控制代码 [...] Unicode 标准提供了这些代码点的完整交换,既不增加也不减少它们的语义。控制代码的语义通常由使用它们的应用程序确定。但是,在没有特定应用用途的情况下,可以根据 ISO/IEC 6429:1992 中规定的控制功能语义来解释它们。”</p>

ISO 6429 实际上等同于ECMA 48,它也提到此代码具有短名称 SUB,并将其定义如下:“SUB 用于代替已发现无效或错误的字符。SUB 旨在通过自动方式引入。” 这反映了该控制代码在 Ascii 中的定义

因此,一般而言,U+001A 可用于指示字符级数据错误,例如在所应用的字符编码中没有解释的所谓字符数据中存在字节。松散地说,它因此意味着“坏字符数据”,但更恰当地说是“当试图将数据解释为字符时,格式错误的数据”。但是,在 Unicode 中,U+FFFD REPLACEMENT CHARACTER 更合适,因为它具有特定的 Unicode 语义。

由于该问题已被标记为“xml”,因此需要注意的是,在 XML 1.0 中,U+001A 是被禁止的,第2.2 节 Characters。请注意,注释“任何 Unicode 字符,不包括代理块、FFFE 和 FFFF”具有误导性(但注释是非规范性的);U+001A 是一个 Unicode 字符,虽然它不是图形字符,并且它的效果在 Unicode 标准中没有定义。

于 2013-06-10T17:17:39.550 回答
20

那是 Ctrl+Z 控制代码。它在 Windows 中有点特别,它从 DOS 继承它,从 CP/M 继承它。它的传统用途是作为文本结束标记,类似于 Ctrl+D 在 Unix 中的使用方式。

然而,在错误消息中看到它或用作编码转换失败的后备字符是非常不寻常的。我会仔细检查代码并确保它不是 U+003F 或 U+FFFD,这是更典型的编码后备字符。或者只是您正在处理的特定代码的一个简单的怪癖。

于 2013-06-10T13:33:40.003 回答
8

据我所知,U+001A是 Unicode 中的遗留字符。它存在的唯一原因是它已经在ASCII中定义为替代字符(“......用于代替被识别为无效或错误或无法在给定设备上表示的字符。”) . 它有时也用于结束字符流(这可能是常见的问题来源)

在 Unicode 中,该功能由U+FFFD REPLACEMENT CHARACTER接管。

于 2013-06-10T13:24:30.803 回答