我在一个系统上工作,客户可以向我发送编码为utf-8的unicode字符串。在某些时候,我打包/序列化(C ++)其数据使用一种逗号分隔列表,如:
fieldName:value,other fieldname:value, etc....
该字符串是一个进程,如果被python脚本捕获以提取字典:
{"fieldName":"value", etc..... }
要提取我使用简单的正则表达式re.compile(ur"(.*?):(.*?)(?:,|$)", re.UNICODE)
。
但我知道用户可以在他们发送的字符串中使用,
和:
,所以我正在搜索我可以在C ++级别使用的最佳ASCII代码来替换我现在使用的逗号?
\xF8
(248)是不错的选择,如果它必须是用户无法用键盘进入的东西!
任何帮助&建议是值得欢迎的。
答案 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而不是内部格式。
理由:
$IFS
- unix / posix系统上的地狱。答案 2 :(得分:0)
\ x0D或\ x0A是一个简单的选择,如果您没有多行输入字符串,并且可以轻松显示这些字符串。如果用户无法输入,请使用Tab键(\ x09)。
答案 3 :(得分:0)
我不知道它是否是最好的 - 我不知道是否有
a"最好的"但我已经看过' |
'为此使用了很多。
如果不必显示或从键盘输入, 有许多控制字符可以做到这一点: ASCII单独定义了四个:FS,GS,RS和US(用于字段 分隔符,组分隔符,记录分隔符和单位 分隔符),代码0x1C-0x1F;这些都是自然的。
当然,最通用的解决方案是使用引用 字符串,带转义字符。这两者都比较困难 然而,解析和生成。