<p>PyDrive的<a href="https://github.com/googledrive/PyDrive/blob/986ad8fb4f68dde6ffaa7c61c951d9573314dea0/pydrive/files.py#L144" rel="nofollow noreferrer">GoogleDriveFile.setContentString</a>方法期望接收一个unicode字符串作为参数,以及一个可选的编码-默认值是UTF-8。在</p>
<p>该方法对unicode字符串进行编码,并使用编码的字符串初始化<code>io.BytesIO</code>实例,如下所示:</p>
<p><code>content = io.BytesIO(input_string.encode('utf-8'))</code></p>
<p>您正在使用testring编码的UTF-8初始化您的<code>StringIO</code>实例,这将导致错误:</p>
<pre><code>>>> 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)
</code></pre>
<p>为了避免错误,请使用unicode字符串初始化<code>StringIO</code>。在</p>
^{pr2}$
<p>Python2的<code>StringIO.StringIO</code>接受unicode或bytestrings作为输入,在这种情况下可能会导致混淆。<code>io.StringIO</code>将只接受unicode作为输入,因此使用<code>io.StringIO</code>可能有助于在代码中更清楚地区分unicode和bytestrings。在</p>