2

xmlrpc を使用して、サーバーからクライアントに文字列 (任意の 8 ビット文字) を送信しています。結局のところ、キャリッジ リターン文字\r(1013進数 16 進数 0xd) は抑制されます。つまり、元の文字列が次の 3 文字 (16 進コードで表される) で構成されている場合:

0x3a 0xd 0xa

次に、クライアント側で「2」文字のみを受け取ります。

0x3a 0xa

完全な元の 3 文字の文字列を .xml で受け取ることができるように、xmlrpc を (python で) 構成するにはどうすればよい0xdですか? バイナリラッパーなどを使用せずにこれを行う方法はありますか?

4

2 に答える 2

2

XML-RPC で str オブジェクトを文字列値として渡すと、文字列としてエンコードおよびデコードされます。(ところで、その文字列はXMLで許可されている文字で構成する必要がありますが、あなたの場合は重要ではありません。)これはバイナリブロックではなく、XMLが解析されるときに\r\n変換されます。\n私見、何もできず、状況を救うオプションのセットもありません。

dumps()文字列に対して何をどのように実行するかを確認loads()xmlrpclibてください。

>>> from xmlrpclib import dumps, loads
>>> s = '\x3a\x0d\x0a'
>>> e = dumps((s,)) # Just a tuple
>>> e
'<params>\n<param>\n<value><string>:\r\n</string></value>\n</param>\n</params>\n'
>>> loads(e)
((':\n',), None)

したがって、loads()が実行されると、\r\nシーケンスは に変換され\n\r失われます。もちろん、変換された文字列を使用することもできますが (たとえば、非常に見栄えが良い)、サーバーの動作を (パラメーターs.encode('hex')に対して実行するために) 変更できない場合、何も役に立ちません。s.decode('hex')

于 2013-01-12T15:15:42.450 に答える