6

ユーザー フォームから送信されたバイナリ データを変更して、Google Cloud Storage に書き込もうとしています。Google ドキュメントの例に従おうとしましたが、書き込み時に次のようなエラーが発生しました。

UnicodeDecodeError: 'ascii' コーデックは位置 34 のバイト 0xe5 をデコードできません: 序数が範囲外です。

私のコードは単純に以下のとおりです

gcs_file = gcs.open(filename,'w',content_type='audio/mp3')
gcs_file.write(buf)
gcs_file.close()

「wb」モードでファイルを開こうとしましたが、「無効なモード wb」が表示されました。エラー。

Javaに関するGCSのメーリングリストで同様の質問を見つけました。GCS 開発チームの提案は、PrintWriter の代わりに writeChannel.write() を使用することでした。Pythonで動作させる方法を誰か提案できますか?

4

1 に答える 1

7

問題は、 gcs_file.write() メソッドが「str」型のデータを期待していることだと思います。buf のタイプは「unicode」であり、明らかにいくつかの Unicode 文字 (おそらく ID3 タグ内) が含まれているため、UnicodeDecodeError が発生します。したがって、buf を UTF-8 にエンコードする必要があります。

gcs_file = gcs.open(filename,'w',content_type='audio/mp3')
gcs_file.write(buf.encode('utf-8'))
gcs_file.close()
于 2013-10-01T06:23:07.753 に答える