ソケット接続を介して修正メッセージを送信し、Pythonクライアント内で受信しています。データ内の各名前=値ペアを分離するSOHがあることを私は知っています。ただし、(文字列として)印刷された場合のデータにはSOHは表示されません。'|'を表示できるようにしたいために問題が発生します または、正規表現内では、個々のフィールドの境界が何であるかがわかりません。受信した文字列のdecode('hex')、decode('uu')を調べましたが、あまり成功していません。また、pack / unpackでは、フォーマット文字列を指定する必要があります(これは、すべての種類の修正に対して行う必要があります)。
クライアントにTwistedClientFactoryを使用しています。
助言がありますか?
フォローアップの質問:reprを使用して関数に渡し、「\x01」を「|」に置き換えます。これで、ネットワークから受け取ったデータを直接渡すと、置換は効果がないようです。ただし、出力をコピーして文字列リテラルとして同じ関数に渡すと、期待どおりに動作します(「\x01」を「|」に置き換えます)。また、re.subを使用してみましたが、まったく同じ結果になりました(文字列リテラルとして渡された場合は機能しますが、ネットワークから直接渡された場合は機能しません)。また、ネットワークからの値をファイルに出力し、vihexeditorを使用して文字列リテラルと比較しました。違いはありません。
いくつかの追加情報:ファイルから値を出力して読み戻すと、「\ x01」でfindを使用できません。これは、置換も機能しないことを意味します(機能しません)。これをバイト配列に変換しようとすると、バイト配列を反復処理すると、「\」、「x」、「0」、「1」のそれぞれが異なるバイトとして解釈されるように見えます。これは奇妙です。'\ x01'は文字列であるか、そうでないかのいずれかであり、16進数です。
助言がありますか?
ありがとう