【发布时间】:2016-04-30 11:05:34
【问题描述】:
我正在尝试真正理解 unicode 标准,并且正在查看 xml spec 的内容:
字符 ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] /* 任何 Unicode 字符,不包括代理块、FFFE 和 FFFF。 */
现在我有几个问题:
- 什么是代理块?它们是表示 4 字节代码点的 UTF-16 代码吗?
- #xXXXX 是指代码点还是这里的 UTF-16 编码值?
- 如果它指的是代码点并且我对代理块的理解是正确的:为什么这里提到代理块?从编码映射的空间中隐藏那些与编码相关的细节,难道不是编码的任务吗?
- 为什么像“U+FFFE”这样的非字符被定义为 unicode 标准的一部分?据我了解,字节顺序检测(以及处理灵活大小的代码字)取决于编码。
感谢您的澄清!
【问题讨论】:
-
您问的是 Unicode 标准还是 W3C 的 XML 规范?
-
关于 XML 规范上下文中的 Unicode 标准;)第二个问题是指 XML 规范中使用的符号,但是我想在这里了解 Unicode 的作用。到目前为止,我认为 Unicode 描述了所有已知符号的集合(并给它们一个数字),并且像 UTF-8 这样的编码描述了从 unicode 字符流到字节流的映射(反之亦然)。但后来我读了这个让我感到困惑的 xml 规范。
-
如果你只问一个问题,你更有可能得到答案。
-
嗯,好的,但所有这些问题都高度相关。 @LưuVĩnhPhúc:您提到的文章指出:> 术语“代理对”是指在 UTF-16 编码方案中对具有高代码点的 Unicode 字符进行编码的一种方法。因此,xml 规范使用 UTF-16 编码值来描述 xml?否则,提及代理块没有多大意义。他们为什么这样做?
标签: unicode encoding utf-8 utf-16