Python 如何在不出现Unicode错误的情况下写入CSV?

Python 如何在不出现Unicode错误的情况下写入CSV?,python,csv,unicode,Python,Csv,Unicode,我已经看过很多关于这个问题的例子,但还没有找到一个对我有效的简单解决方案。我仍然收到错误: UnicodeEncodeError:“ascii”编解码器无法对位置5中的字符u'\xad'进行编码:序号不在范围(128)内。 下面是我根据stackoverflow上提出的类似问题编写的代码 f = open(out_filepath, 'w') writer = csv.DictWriter(f, fieldnames, extrasaction='ignore') headers = d

我已经看过很多关于这个问题的例子,但还没有找到一个对我有效的简单解决方案。我仍然收到错误:

UnicodeEncodeError:“ascii”编解码器无法对位置5中的字符u'\xad'进行编码:序号不在范围(128)内。

下面是我根据stackoverflow上提出的类似问题编写的代码

f = open(out_filepath, 'w')
  writer = csv.DictWriter(f, fieldnames, extrasaction='ignore')
  headers = dict([(header, header) for header in fieldnames])
  data = [headers]
  data.extend([row for row in rows]) # add data rows
  for row in data:
    try:
        writer.writerow(row)
    except:
        for value in row.itervalues():
            for s in value:
                try:
                    unicode(s).encode("utf-8")
                except:
                    s = ''
        writer.writerow(row)
  f.close() 
下面是我正在尝试的更新代码,它仍然会给我带来错误:

for row in data:
    try:
        writer.writerow(row)
    except:
        for key in row:
            value = row[key]
            letterlist = list(value)
            for i in range(len(letterlist)):
                try:
                    letterlist[i].decode('string_escape')
                    letterlist[i].encode('ascii', 'ignore')
                except:
                    print 'Letter excluded from ' +key+' '+ str(letterlist) 
                    letterlist[i] = ''
            value = ''.join(letterlist)
            row[key] = value
        #print row
        writer.writerow(row)

以下是对我有效的方法:

f = open('eg.csv', 'w')
s = 'some troublesome string'
f.write(s.decode('string_escape')) 
如果这不起作用,我会:

f.write(s.encode('ascii', 'ignore'))

我最终使用这个函数将unicode转换为utf8

def ValConvert(val):
  if type(val).__name__ == 'unicode':
    return val.encode('utf8')
  elif type(val).__name__ == 'str':
    return val
  else:
    return str(val)

这是拉丁-1编码
u'\xad'.encode(“拉丁-1”)
如果是拉丁-1编码,我如何修复现有的内容以避免出现错误?请尝试
writer.writerow([s.encode(“utf-8”)表示行中的s])
,您的数据是unicode吗?我仍然收到unicode错误。您的实际数据看起来像什么。我可以使用上面的代码将u
'\xad'
写入文件。您是否正在尝试
writer.writerow(row.decode('string_escape'))
writer.writerow(row..encode('ascii',ignore'))
?我尝试了,但出现了一个错误。我编辑了我的帖子,向您展示了我到目前为止的成果。请尝试在编写时进行解码/编码,如
writer.writerow(row.decode('string\u escape'))