分隔字符串的最佳ASCII字符是什么?

ale*_*son 2 c c++ python string unicode

我在一个系统上工作,客户可以向我发送编码为utf-8的unicode字符串.在某些时候,我打包/序列化(C++)其数据使用一种逗号分隔列表,如:

fieldName:value,other fieldname:value, etc....
Run Code Online (Sandbox Code Playgroud)

该字符串是一个进程的goind,如果被python脚本捕获以提取字典:

 {"fieldName":"value", etc..... }
Run Code Online (Sandbox Code Playgroud)

提取我使用简单的正则表达式re.compile(ur"(.*?):(.*?)(?:,|$)", re.UNICODE).但我知道用户可以使用,:发送的字符串,所以我正在寻找可以在C++级别使用的最佳ASCII代码来替换我现在使用的逗号?

\xF8(248)一个不错的选择,如果它必须有一些用户无法使用键盘输入!欢迎任何帮助和建议.

Mar*_*ers 12

我使用了一个ASCII字段分隔符控制代码 ; 它们的优点是它们具有标准化的含义:

^\  28  1C  FS  ?   File Separator
^]  29  1D  GS  ?   Group separator 
^^  30  1E  RS  ?   Record Separator    
^_  31  1F  US  ?   Unit separator  
Run Code Online (Sandbox Code Playgroud)

可以用作分隔符来标记数据结构的字段.如果用于层次级别,则US是最低级别(划分纯文本数据项),而RS,GS和FS的级别越来越高,以划分由其下级别项目组成的组.

或者使用像JSON或XML这样的真实格式.


dom*_*om0 6

使用JSON而不是内部格式.

理由:

  1. 无论如何它看起来像JSON
  2. 分隔符字符没有问题.它迟早会出错,例如$IFS在unix/posix系统上看到-hell.
  3. 易于人类阅读,与使用可能无法正确显示且无法轻易输入的特殊字符(主要用于调试目的)相反
  4. 可忽略不计的开销(如果有的话)
  5. 没有麻烦解析并在现有的每种语言中生成JSON.
  6. 在许多变体和许多许可证中存在C/C++的JSON库,因此即使专有软件包含其中一个也不是问题.