回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有一个包含一些字符串的列表(其中大部分是从sqlite3数据库获取的):</p>
<pre><code>stats_list = ['Statistik \xc3\xb6ver s\xc3\xa5nger\n', 'Antal\tS\xc3\xa5ng', '1\tCarola - Betlehems Stj\xc3\xa4rna', '\n\nStatistik \xc3\xb6ver datak\xc3\xa4llor\n', 'K\xc3\xa4lla\tAntal', 'MANUAL\t1', '\n\nStatistik \xc3\xb6ver \xc3\xb6nskare\n', 'Antal\tId', u'1\tNiclas']
</code></pre>
<p>当我试图加入时:</p>
<pre><code>return '\n'.join(stats_list)
</code></pre>
<p>我得到这个错误:</p>
<pre><code>UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 10: ordinal not in range(128)
</code></pre>
<p>仅仅通过查看列表就可以知道为什么会发生这种情况吗?如果我循环浏览列表并将其打印到屏幕上,我会得到:</p>
<pre>
Statistik över sånger
Antal Sång
1 Carola - Betlehems Stjärna
Statistik över datakällor
Källa Antal
MANUAL 1
Statistik över önskare
Antal Id
1 Niclas
</pre>
<p>这正是我所期望的,没有显示错误。(特殊字符是瑞典语)。</p>
<p>编辑:</p>
<p>我试试这个:</p>
<pre><code> return '\n'.join(i.decode('utf8') for i in stats_list)
</code></pre>
<p>但它回来了:</p>
<pre><code>Traceback (most recent call last):
File "./CyberJukebox.py", line 489, in on_stats_to_clipboard
stats = self.jbox.get_stats()
File "/home/nine/dev/python/CyberJukebox/jukebox.py", line 235, in get_stats
return self._stats.get_string()
File "/home/nine/dev/python/CyberJukebox/jukebox.py", line 59, in get_string
return '\n'.join(i.decode('utf8') for i in stats_list)
File "/home/nine/dev/python/CyberJukebox/jukebox.py", line 59, in <genexpr>
return '\n'.join(i.decode('utf8') for i in stats_list)
File "/usr/lib/python2.7/encodings/utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 10: ordinal not in range(128)
</code></pre>
<p>编辑2:</p>
<p>建议的解决办法对我在翻译中很有效。但是当我执行代码的时候它就不起作用了。我不能把我的头缠在这上面。可能是我遗漏了一些明显的东西,所以我把整个方法粘贴在这里:</p>
<pre><code> def get_string(self):
stats_list = [u'Statistik över sånger\n', u'Antal\tSång']
stats = sorted([(v, k) for k, v in self.song_stats.iteritems()], reverse=True)
for row in stats:
line = '%s\t%s' % row
stats_list.<a href="https://www.cnpython.com/list/append" class="inner-link">append</a>(line)
stats_list.append(u'\n\nStatistik över datakällor\n')
stats_list.append(u'Källa\tAntal')
stats = sorted([(k, v) for k, v in self.exts_stats.iteritems()])
for row in stats:
line = '%s\t%s' % row
stats_list.append(line)
stats_list.append(u'\n\nStatistik över önskare\n')
stats_list.append(u'Antal\tId')
stats = sorted([(v, k) for k, v in self.wisher_stats.iteritems() if k != ''], reverse=True)
for row in stats:
line = '%s\t%s' % row
stats_list.append(line)
return '\n'.join(i.decode('utf8') for i in stats_list)
</code></pre>
<p><code>song_stats</code>、<code>exts_stats</code>和<code>wisher_stats</code>是类中的词典。</p>