擅长:python、mysql、java
<p><code>cPickle.dumps()</code>的结果是一个<code>str</code>对象,而不是一个<code>unicode</code>对象。您需要在代码中找到解码pickled<code>str</code>对象的步骤,并省略该步骤。</p>
<p>不要试图将<code>unicode</code>对象转换为<code>str</code>对象。两个错误是不对的。示例(Python2.6):</p>
<pre><code>>>> import cPickle
>>> ps = cPickle.dumps([1,2,3], -1)
>>> ps
'\x80\x02]q\x01(K\x01K\x02K\x03e.'
>>> ups = ps.decode('latin1')
>>> str(ups)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\x80' in position 0: ordinal not in range(128)
>>>
</code></pre>
<p>您很可能正在使用默认(且效率低下)协议0,该协议生成“人类可读”输出:</p>
<pre><code>>>> ps = cPickle.dumps([1,2,3])
>>> ps
'(lp1\nI1\naI2\naI3\na.'
>>>
</code></pre>
<p>这大概是ASCII(但没有文档记录),因此<code>str(gem.value)</code>kludge很可能是“工作的”:</p>
<pre><code>>>> ps == str(unicode(ps))
True
>>>
</code></pre>