我正在研制一个处理器,它将文本分割成带有标记的块:
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范围内使用,这使我重新开始.
那么我可以使用哪个unicode范围呢?\ff0000?或者我怎么解决这个问题?
谢谢!
发布于 2016-09-04 23:12:05
Unicode联盟想到了这一点。有一系列Unicode代码点,它们的意思是永远不能表示可显示的字符,而是元代码:
非字符是永久保留的代码点,永远不会给它们分配字符。 ..。 标记字符旨在支持在没有其他机制(如标记语言)的情况下对文本流进行内部标记的通用方案。反对使用标记字符进行语言标记。 (http://www.unicode.org/versions/Unicode9.0.0/ch23.pdf)
您应该能够使用常规控制字符作为“私有”标记,因为这些字符不应该出现在正确的字符串中。这将是从U+0000到U+001F的范围,不包括选项卡(U+0009)、常见的“返回”(U+000A和U+000D),以及为了安全起见,U+0000本身(一些库不喜欢字符串中间的空字符)。
Non-characters 非字符是在Unicode标准中永久保留的用于内部使用的代码点。不建议在开放的Unicode文本数据交换中使用它们。
您可以使用U+FEFF (目前正式定义为非-A-字符)或U+FFFE和U+FFFF。还有几个“正式的非a-字符”定义,您可以相当肯定它们不会出现在常规的文本字符串中。
有几个具有预定义定义的随机序列,并且非常不可能出现在纯文本字符串中,如下所示:
特产:U+FFF0-U+FFF8 8 范围U+FFF0..U+FFF8中的9个未分配的Unicode代码点保留给特殊字符定义。 注释字符:U+FFF9-U+FFFB 线性注释由与注释字符序列相关的注释文本组成。对于所有常规编辑和文本处理算法,注释字符被视为文本流的一部分。注释文本也是内容的一部分,但是对于所有或部分文本处理,它并不构成主文本流的一部分。 标签字符:U+E0000-U+E007F 此块编码一组95个特殊使用的标记字符,以便使用可以与Unicode中的普通文本内容字符严格分离的字符拼写出ASCIIbased字符串标记。 (上述一章的所有引文)
在约定范围内,还可以使用U+2028 (行分隔符)和/或U+2029段落分隔符。
从技术上讲,您对U+E000-U+F8FF(“私有使用区域”)的使用是可以的,因为这些代码点只能结合特定的字体定义一个明确的字符。但是,如果您从包含字体的源获取纯文本,则可能会弹出这些代码。
至于如何将其编码到字符串中,这并不重要,紧跟在私有标记标记后面的数字代码是否是有效的Unicode字符并不重要。如果您看到一个您自己的标记标记,那么紧跟在后面的值总是您自己的私有序列号。
正如你所看到的,有很多可能性。我想最重要的标准是您是否想在这些字符串上使用其他函数。如果您创建的字符串在技术上是无效的Unicode (例如,因为它包含非a-字符值),一些外部函数可能会选择不对它们工作,或者悄悄地删除坏值。在这种情况下,您需要严格遵守只使用“有效”代码点的系统。
https://stackoverflow.com/questions/39322113
复制相似问题