Python:UnicodeEncodeError:'ascii'编解码器无法在位置 78 编码字符 u'\xf1':序号不在范围内(128)

Rei*_*ion 5 python

我已经尝试了两种变体来解决这个问题,但会导致另一个错误。首先尝试encode和另一个尝试strip(#) 假设这是在此错误中捕获的问题:

"color":rcolor,"text_color":tcolor})
File "/usr/lib/python2.7/csv.py", line 152, in writerow
    return self.writer.writerow(self._dict_to_list(rowdict))
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf1' in position 78: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)

我的代码现在看起来像这样:

routes = db.routes.find()
    for route in routes:
        try:
            color = route["properties"]["color"]
            color = color.strip('#')
            print(color)

            tcolor = route["properties"]["tcolor"]
            tcolor = tcolor.strip('#')
            print(tcolor)
        except KeyError:
            color = "0000FF"
            tcolor = ""

        writer.writerow({"route_id":route["route_id"],
                   "agency_id":route["properties"]["agency_id"],...,
                   "route_color":color,"route_text_color":tcolor})
Run Code Online (Sandbox Code Playgroud)

我不太确定为什么它不断收到 unicode 错误...

Var*_*rad 3

在写入 csv 之前尝试解析您的 dict 以获取 unicode 值。

def convert(input):
    if isinstance(input, dict):
        return {convert(key): convert(value) for key, value in input.iteritems()}
    elif isinstance(input, list):
        return [convert(element) for element in input]
    elif isinstance(input, unicode):
        return input.encode('utf-8')
    else:
        return input

if __name__ == "__main__":
    utf_route = convert(route)
Run Code Online (Sandbox Code Playgroud)

因此,如果您在写入 csv 时遇到错误,请尝试以下操作

import codecs

with codecs.open("local/file1.csv", "w", encoding='utf8') as f:
    writer = csv.writer(f, delimiter=",")
    writer.writerow(data.keys())
    writer.writerow(data.values())
Run Code Online (Sandbox Code Playgroud)