Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 分隔字符串的最佳ASCII字符是什么?_Python_C++_C_String_Unicode - Fatal编程技术网

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

Python 分隔字符串的最佳ASCII字符是什么?,python,c++,c,string,unicode,Python,C++,C,String,Unicode,我在一个系统上工作,客户可以在该系统上向我发送编码为utf-8的unicode字符串。在某种程度上,我使用一种逗号分隔的列表对其数据进行打包/序列化(C++),如: fieldName:value,other fieldname:value, etc.... 该字符串从进程中传出,如果python脚本捕获该字符串以提取字典: {"fieldName":"value", etc..... } 为了提取它,我使用了一个简单的正则表达式re.compile(ur“(.*?):(.*?(,|$)”

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

fieldName:value,other fieldname:value, etc....
该字符串从进程中传出,如果python脚本捕获该字符串以提取字典:

 {"fieldName":"value", etc..... }
为了提取它,我使用了一个简单的正则表达式
re.compile(ur“(.*?):(.*?(,|$)”,re.UNICODE)
。 但是我知道用户可以在他们发送的字符串中使用<代码>、<代码>和<代码>:<代码>,所以我正在搜索我可以在C++级别使用的最好的ASCII代码来替换现在使用的逗号?

如果必须是用户无法用键盘输入的内容,那么
\xF8
(248)是否是一个不错的选择!
欢迎提供任何帮助和建议。

使用JSON而不是内部格式

理由:

  • 看起来已经是JSON了
  • 分隔符字符没有问题。它迟早会出错,请参见unix/posix系统上的示例
    $IFS
    -hell
  • 与使用可能无法正确显示且无法由人工轻松输入的特殊字符(主要用于调试目的)相比,易于人类阅读
  • 可忽略的开销(如有)
  • 在现有的每种语言中都可以轻松解析和生成JSON
  • C/C++的JSON库有很多变体,并且有很多许可证,所以即使是专有软件也不存在包含其中一个的问题

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

    我会使用其中一个;其优点是具有标准化的含义:

    ^\  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。

    我不知道它是否是最好的格式,我不知道是否有 “最佳”-但我已经看到“
    ”在这方面使用了很多

    如果它不必可见,也不必通过键盘输入, 有许多控制字符可以执行此操作: ASCII单独定义了四个:FS、GS、RS和US(用于字段 分隔符、组分隔符、记录分隔符和单位 分隔符),代码0x1C-0x1F;这些都是自然的

    当然,最普遍的解决方案是使用quoted 字符串,带有转义字符。这两者都很难做到
    但是,解析并生成

    这似乎是
    Ø
    (0xf8)的一个好选择,至少在一些斯堪的纳维亚键盘上很容易输入。没有“最佳”选择,因为任何这样的选择都取决于编码的数据。你知道输入是有效的UTF-8吗?在检查完之后,可以使用UTF-8中无效的字节。0xF8就是这样一个字节@JoachimIsaksson:Unicode代码点0xF8被编码为0xC3 0xB8。谢谢这个建议,我终于在我的C++代码中增加了一点复杂性,把我的字符串映射传递给JSON编写器,我使用了Python JSON解析器,现在所有奇怪的单元测试我都有了一个绿色!所以