擅长:python、mysql、java
<p>这个问题并不是因为使用了<code>zip()</code>-看起来没问题,而是编码问题。餐厅名称可能是unicode字符串,或者是ASCII或UTF8以外的编码?可能是ISO-8859-1?你知道吗</p>
<p>csv模块不处理unicode;其他编码可能可以工作,但这取决于具体情况。该模块确实可以处理8位值(ASCII NUL除外),因此您应该能够将它们编码为UTF8,如下所示:</p>
<pre><code>ENCODING = 'iso-8859-1' # assume strings are encoded in this encoding
def to_utf8(item, from_encoding):
if isinstance(item, str):
# byte strings are first decoded to unicode
item = unicode(item, from_encoding)
return unicode(item).encode('utf8')
with open('data.csv', 'w') as out:
csv_out = csv.writer(out)
csv_out.writerow(['Restaurant Name', 'Change'] * 2)
for x, y in zip(arrayForInitialSpots, arrayForChosenSpots):
csv_out.writerow([to_utf8(item, ENCODING) for item in x+y])
</code></pre>
<p>其工作原理是将<code>x+y</code>形成的元组的每个元素转换为UTF-8字符串。这包括其他编码中的字节字符串,以及可以通过<code>unicode()</code>转换为unicode字符串的其他对象,如整数。如果字符串是unicode,只需将ENCODING设置为None。你知道吗</p>