【发布时间】:2016-05-07 22:28:53
【问题描述】:
我在Win7,Python2.7。
有字符串。 原图:
A. P. Møller 马士基
UTF-8:
s = 'A. P. M\xc3\xb8ller M\xc3\xa6rsk'
我需要把它写成 csv。 试试这个:
with open('14.09 Anbefalte aksjer.csv', 'w') as csvfile:
writer = csv.writer(csvfile)
writer.writerow([s])
知道了:
A. P. Møller Mærsk
尝试使用 UnicodeWriter:
class UnicodeWriter:
"""
A CSV writer which will write rows to CSV file "f",
which is encoded in the given encoding.
"""
def __init__(self, f, dialect=csv.excel, encoding="utf-8", **kwds):
# Redirect output to a queue
self.queue = StringIO()
self.writer = csv.writer(self.queue, dialect=dialect, **kwds)
self.stream = f
self.encoder = codecs.getincrementalencoder(encoding)()
def writerow(self, row):
self.writer.writerow([s.encode("utf-8") for s in row])
# Fetch UTF-8 output from the queue ...
data = self.queue.getvalue()
data = data.decode("utf-8")
# ... and reencode it into the target encoding
data = self.encoder.encode(data)
# write to the target stream
self.stream.write(data)
# empty queue
self.queue.truncate(0)
def writerows(self, rows):
for row in rows:
self.writerow(row)
s = 'A. P. M\xc3\xb8ller M\xc3\xa6rsk'.decode('utf8')
with open('14.09 Anbefalte aksjer.csv', 'w') as csvfile:
writer = UnicodeWriter(csvfile)
writer.writerow([s])
又来了:
A. P. Møller Mærsk
试试 unicodecsv:
再说一遍:
A. P. Møller Mærsk
怎么了?怎样才能写对?
【问题讨论】:
-
您用什么打开 CSV 文件?当您通过简单的双击打开文件时,Excel 在处理 Unicode/UTF-8 编码的 CSV 数据方面具有传奇色彩。试试程序的 Import 对话框,我想你可以在那里选择应该假设的字符编码。如果这不起作用,请尝试 LibreOffice/OpenOffice 的 Calc,它也提供了选项。或者至少在 NotePad++ 中打开它,看看编码是否正确。
-
谢谢你,CBroe。我通过更改 excel 编码做到了。
标签: windows python-2.7 csv unicode