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

时间:2014-10-10 13:03:46

标签: python c++ c string unicode

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

fieldName:value,other fieldname:value, etc....

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

 {"fieldName":"value", etc..... }

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

\xF8(248)是不错的选择,如果它必须是用户无法用键盘进入的东西! 任何帮助&建议是值得欢迎的。

4 个答案:

答案 0 :(得分:12)

我会使用其中一个ASCII field separator control codes;它们的优点是它们具有标准化的含义:

^\  28  1C  FS  ␜   File Separator
^]  29  1D  GS  ␝   Group separator 
^^  30  1E  RS  ␞   Record Separator    
^_  31  1F  US  ␟   Unit separator  
  

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

或者使用JSON或XML等真实格式。

答案 1 :(得分:6)

使用JSON而不是内部格式。

理由:

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

答案 2 :(得分:0)

\ x0D或\ x0A是一个简单的选择,如果您没有多行输入字符串,并且可以轻松显示这些字符串。如果用户无法输入,请使用Tab键(\ x09)。

答案 3 :(得分:0)

我不知道它是否是最好的 - 我不知道是否有 a"最好的"但我已经看过' |'为此使用了很多。

如果不必显示或从键盘输入, 有许多控制字符可以做到这一点: ASCII单独定义了四个:FS,GS,RS和US(用于字段 分隔符,组分隔符,记录分隔符和单位 分隔符),代码0x1C-0x1F;这些都是自然的。

当然,最通用的解决方案是使用引用 字符串,带转义字符。这两者都比较困难 然而,解析和生成。