2

ソケット接続を介して修正メッセージを送信し、Pythonクライアント内で受信しています。データ内の各名前=値ペアを分離するSOHがあることを私は知っています。ただし、(文字列として)印刷された場合のデータにはSOHは表示されません。'|'を表示できるようにしたいために問題が発生します または、正規表現内では、個々のフィールドの境界が何であるかがわかりません。受信した文字列のdecode('hex')、decode('uu')を調べましたが、あまり成功していません。また、pack / unpackでは、フォーマット文字列を指定する必要があります(これは、すべての種類の修正に対して行う必要があります)。

クライアントにTwistedClientFactoryを使用しています。

助言がありますか?

フォローアップの質問:reprを使用して関数に渡し、「\x01」を「|」に置き換えます。これで、ネットワークから受け取ったデータを直接渡すと、置換は効果がないようです。ただし、出力をコピーして文字列リテラルとして同じ関数に渡すと、期待どおりに動作します(「\x01」を「|」に置き換えます)。また、re.subを使用してみましたが、まったく同じ結果になりました(文字列リテラルとして渡された場合は機能しますが、ネットワークから直接渡された場合は機能しません)。また、ネットワークからの値をファイルに出力し、vihexeditorを使用して文字列リテラルと比較しました。違いはありません。

いくつかの追加情報:ファイルから値を出力して読み戻すと、「\ x01」でfindを使用できません。これは、置換も機能しないことを意味します(機能しません)。これをバイト配列に変換しようとすると、バイト配列を反復処理すると、「\」、「x」、「0」、「1」のそれぞれが異なるバイトとして解釈されるように見えます。これは奇妙です。'\ x01'は文字列であるか、そうでないかのいずれかであり、16進数です。

助言がありますか?

ありがとう

4

2 に答える 2

0

Ignacio Vazquez-Abramsによって提案されたようにreprを印刷すると、問題の一部が解決されます。

于 2012-09-12T20:33:22.350 に答える
0

'\ x01'を使用した置換は、ネットワーク経由で着信するデータ(reprの出力ではない)で機能するように見えます。理由はわかりませんが、これは私の要件を満たしています。

于 2012-09-13T21:20:46.683 に答える