我正在处理一个处理器,它将文本分成带有标记的块:
LOREM IPSUM SED AMED
将被解析为:
{word:1}LOREM{/word:1}{space:2}
{word:3}IPSUM{/word:3}{space:4}
{word:5}SED{/word:5}{space:6}
{word:7}AMED{/word:7}
但是我不想使用“{word}”等,因为它会导致处理器关闭,因为它又是一个字符串...我需要标记为:
\E002\0001 LOREM \E003\0001 \E004\0002
\E002\0003 IPSUM \E003\0004 \E004\0005
\E002\0006 SED \E003\0006 \E004\0007
\E002\0008 AMED \E003\0008
但是\ 0001也在Unicode Range中使用,这导致我再次开始......
那么我可以使用哪个unicode系列? \ FF0000?或者我该如何解决这个问题?
谢谢!
答案 0 :(得分:1)
Unicode Consortium想到了这一点。有一系列的Unicode代码点意味着从不代表可显示的字符,而是使用元代码:
非字符是永久保留且永远不会有字符的代码点 分配给他们 ...
标记字符旨在支持文本内部标记的一般方案 没有其他机制的流,例如标记语言。标签的使用 不推荐使用语言标记字符 (http://www.unicode.org/versions/Unicode9.0.0/ch23.pdf)
你应该可以使用常规控制字符作为"私人"标签,因为这些不应该出现在正确的字符串中。这是从U+0000
到U+001F
的范围,不包括标签(U+0009
),常见"返回" (U+000A
和U+000D
),为安全起见,U+0000
本身(某些库不喜欢字符串中间的空字符)。
<强>非字符强>
非字符是Unicode标准中永久保留的代码点 内部使用。建议不要将它们用于Unicode文本数据的开放式交换。
您可以使用U+FEFF
(目前正式定义为非字符),或U+FFFE
和U+FFFF
。还有几个&#34;官方不是一个字符&#34;已定义,您可以相当确定它们不会出现在常规文本字符串中。
一些具有预定义定义的随机序列,因此在纯文本字符串中不太可能出现:
特价:U + FFF0-U + FFF8
U + FFF0..U + FFF8范围内的九个未分配的Unicode代码点保留用于 特殊字符定义。注释字符:U + FFF9-U + FFFB
行间注释包括注释与注释序列相关的文本 字符。对于所有常规编辑和文本处理算法,带注释的字符 被视为文本流的一部分。注释文本也是内容的一部分, 但是对于所有或一些文本处理,它不构成主文本流的一部分。标签字符:U + E0000-U + E007F
该块对一组95个特殊用途的标记字符进行编码,以便能够拼写出基于ASCII的字符 字符串标记使用可以与普通文本内容严格分开的字符 Unicode中的字符 (上述章节中的所有引文)
遵守约定,您还可以使用U+2028
(行分隔符)和/或U+2029
段落分隔符。
从技术上讲,您使用U+E000
- U+F8FF
(&#34;私人使用区&#34;)是可以的,因为这些代码点只能定义一个明确的字符与某个字体。但是,如果从包含 字体的源获取纯文本,则可能会弹出这些代码。
至于如何将其编码到字符串中:如果紧跟在私有标记标记之后的数字代码是否是有效的Unicode字符,那么这并不重要。如果您看到自己的标记标记之一,则紧随其后的值始终是您自己的私有序列号。
如你所见,有很多可能性。我想最重要的标准是你是否想在这些字符串上使用其他函数。如果您创建一个技术上无效的Unicode字符串(例如,因为它包含非字符值),某些外部函数可能会选择无法处理它们,或者以静默方式删除错误值。在这种情况下,您需要严格遵守只使用“有效”的系统。代码点。