6

我正在尝试修改用户表单提交的一些二进制数据,并将其写入谷歌云存储。我尝试按照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 开发团队的建议是使用 writeChannel.write() 而不是 PrintWriter。有人可以建议如何使它在 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 回答