2

ftplibを使用してユニコードコンテンツを含むXMLをFTPサーバーにアップロードしようとしていますが、storbinaryメソッドを使用してアップロードしようとすると次の例外が発生します。XMLデータはUnicode(utf-8)に適切にエンコードされていますが、それを確認しました。アップロード中にstorbinaryがそれを'ascii'にエンコードしようとしている理由がわかりません。誰か助けてもらえますか?

-> 429 ftp.storbinary( "STOR file.xml"、xml)
    430
    431 def run(self):

storbinaryの/usr/lib/python2.7/ftplib.pyc(self、cmd、fp、blocksize、callback、rest)
    463 buf = fp.read(blocksize)
    bufでない場合は464:ブレーク
-> 465 conn.sendall(buf)
    466コールバックの場合:callback(buf)
    467 conn.close()

meth(name、self、* args)の/usr/lib/python2.7/socket.pyc
    222
    223 def meth(name、self、* args):
-> 224 return getattr(self._sock、name)(* args)
    225
    _socketmethodsの_mの場合は226:

UnicodeEncodeError:'ascii'コーデックは位置3368の文字u'\ xae'をエンコードできません:序数が範囲内にありません(128)

4

2 に答える 2

1

バイナリ モードで開いたファイルを に渡す必要がありますftp.storbinary()。たとえば、Unicode 文字列をfilenameファイルとしてアップロードする場合:

import io

assert isinstance(unicode_string, unicode)
file = io.BytesIO(unicode_string.encode("utf-8"))
ftp.storbinary("STOR filename", file)

unicode_stringxml が含まれている場合。xml 宣言で使用される文字エンコーディングが、ファイルの保存に使用するエンコーディングと一致していることを確認してください。

于 2013-02-24T11:17:32.090 に答える
0

解決策を見つけることができました。@Cairnarvonによるコメントは部分的に正しく、文字列をエンコードしていましたが、StringIOインスタンスに書き込まれた文字列の他のビットがエンコードされていませんでした。最終的に、XMLビットを作成して全体としてエンコードすることになりました。以下のpastebinリンクで私のコードを見ることができます。

http://pastebin.com/GugTLRQJ

于 2013-03-03T14:28:20.190 に答える