解释通过网络作为二进制文件接收的python字符串(FIX)

时间:2012-08-30 18:34:13

标签: python twisted fix-protocol

我通过套接字连接发送修复消息并在python客户端中接收。 我知道在数据中有一个SOH分隔每个名称=值对。 但是打印时的数据(作为字符串)并不显示SOH。问题出现是因为我希望能够显示'|'或者我无法在正则表达式中说出,各个字段的边界是什么。 我已经在收到的字符串上看了解码('hex'),解码('uu'),没有太大的成功。 打包/解压缩还要求您提供格式字符串(我必须为每种类型的修复程序执行此操作)。

我正在为客户端使用Twisted ClientFactory。

有什么建议吗?

跟进问题: 我使用repr并将其传递给函数以用'|'替换'\ x01'。 现在,当我直接传入从网络收到的数据时,替换似乎没有任何影响。但是,当我复制输出并将其作为字符串文字传递到同一个函数中时。它的行为与预期一致(用'|'替换'\ x01')。 我也尝试使用re.sub,结果完全相同(当作为字符串文字传入时工作,但直接从网络传入时不工作)。 我还将网络中的值打印到一个文件中,并使用vi hex编辑器与字符串文字进行比较。它没有透露任何差异。

其他一些信息: 当我从文件中打印值并将其​​读回时,我无法在'\ x01'上使用find,这意味着替换也不会起作用(它没有)。 当我尝试将其转换为字节数组时,当我遍历字节数组时,似乎每个'\','x','0','1'被解释为不同的字节。这很奇怪。 '\ x01'是字符串或不是字符串,是十六进制。

有什么建议吗?

感谢

2 个答案:

答案 0 :(得分:0)

根据Ignacio Vazquez-Abrams的建议打印出repr,解决了部分问题。

答案 1 :(得分:0)

似乎使用'\ x01'替换来自网络上的数据(而不是repr的输出)。我不确定原因是什么,但这符合我的要求。