PyDrive 的GoogleDriveFile.setContentString方法期望接收一个 unicode 字符串作为参数和一个可选的编码 - 默认为 UTF-8。
该方法对 unicode 字符串进行编码,并使用编码后的字符串来初始化io.BytesIO
实例,如下所示:
content = io.BytesIO(input_string.encode('utf-8'))
您正在StringIO
使用 UTF-8 编码的字节串初始化您的实例,这会导致错误:
>>> s = u'ŋđŧ¶eŋŧ¶ß¶ŋŧ¶'.encode('utf-8')
>>> sio = StringIO(s)
>>> io.BytesIO(sio.getvalue().encode('utf-8'))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 0: ordinal not in range(128)
为避免该错误,请StringIO
使用 unicode 字符串初始化 。
>>> s = u'ŋđŧ¶eŋŧ¶ß¶ŋŧ¶'.encode('utf-8')
>>> sio = StringIO(s.decode('utf-8'))
>>> io.BytesIO(sio.getvalue().encode('utf-8'))
<_io.BytesIO object at 0x7f36c0dc0bf0>
Python2StringIO.StringIO
接受 unicode 或 bytestrings 作为输入,在这种情况下可能会导致混淆。io.StringIO
只会接受 unicode 作为输入,因此 usingio.StringIO
可能有助于在代码中更清晰地区分 unicode 和字节串。