什么是 Unicode U+001A 字符?又名 0x1A
Posted
技术标签:
【中文标题】什么是 Unicode U+001A 字符?又名 0x1A【英文标题】:What is the Unicode U+001A Character? Aka 0x1A 【发布时间】:2013-06-06 03:23:51 【问题描述】:U+001A 字符经常出现在与字符编码相关的错误消息中。 U+001A字符是什么?
【问题讨论】:
请注意,U+001A 是 XML 中的无效字符(您的标签之一) 【参考方案1】:据我所知,U+001A 是 Unicode 中的传统字符。它存在的唯一原因是它已经在ASCII 中定义为substitute character ("... 用于代替被识别为无效或错误或无法在给定设备上表示的字符。”)。它有时也用于结束字符流(这可能是常见的问题来源)
在 Unicode 中,该功能由 U+FFFD REPLACEMENT CHARACTER 接管。
【讨论】:
【参考方案2】:这是 Ctrl+Z 控制代码。它在 Windows 中有点特别,它从 DOS 继承它,从 CP/M 继承它。它的传统用途是作为文本结束标记,类似于 Ctrl+D 在 Unix 中的使用方式。
然而,在错误消息中看到它或用作编码转换失败的后备字符是非常不寻常的。我会仔细检查代码并确保它不是 U+003F 或 U+FFFD,这是更典型的编码后备字符。或者只是您正在处理的特定代码的一个简单的怪癖。
【讨论】:
【参考方案3】:U+001A 在 Unicode 标准中被定义为一个名为 SUBSTITUTE 的控制字符,它属于一个特征如下的组,在标准的chapter 16 中:“Unicode 中预留了 65 个代码点与 C0 兼容的标准 ISO/IEC 2022 框架中定义的和 C1 控制代码 [...] 增加或减少它们的语义。控制代码的语义通常由使用它们的应用程序确定。然而,在没有 具体应用用途,可根据 ISO/IEC 6429:1992 中规定的控制功能语义进行解释。”
ISO 6429 实际上等同于ECMA 48,它也提到此代码具有短名称 SUB,并将其定义如下:“SUB 用于代替已发现无效或错误。 SUB旨在 以自动方式引入。”这反映了definition of this control code in Ascii。
因此,一般而言,U+001A 可用于指示字符级数据错误,例如在所应用的字符编码中没有解释的所谓字符数据中存在字节。松散地说,它因此意味着“坏字符数据”,但更恰当地说是“当试图将数据解释为字符时,格式错误的数据”。但是,在 Unicode 中,U+FFFD REPLACEMENT CHARACTER 更合适,因为它具有特定的 Unicode 语义。
由于问题已被标记为“xml”,需要注意的是,在 XML 1.0 中,U+001A 是被禁止的,通过子句2.2 Characters。请注意,注释“任何 Unicode 字符,不包括代理块、FFFE 和 FFFF”具有误导性(但 cmets 是非规范性的); U+001A 是一个 Unicode 字符,虽然它不是一个图形字符,并且它的效果在 Unicode 标准中没有定义。
【讨论】:
感谢您,试图找出 libxml 拒绝看似有效的 utf8 字符的原因。不知道为什么我会得到它们,但至少现在我可以理解问题所在了......以上是关于什么是 Unicode U+001A 字符?又名 0x1A的主要内容,如果未能解决你的问题,请参考以下文章
python - 使用 Django 将 Unicode 字符存储到 MySQL 时出现问题