【问题标题】:'Ascii' codec can't encode characters in position 152-153 [duplicate]“Ascii”编解码器无法对位置 152-153 中的字符进行编码 [重复]
【发布时间】:2018-09-22 12:33:27
【问题描述】:

我正在尝试使用二进制模式在 csv 文件中写入一些数据。我的数据是一个列表,如下所示:

data= [[None, u'https://aaa.com/p/cat.do?tags=|5555|4444|8888&zzz;A=3', u'00 .00.00.000, 00.00.00.000', u'25359725', u'2018-03-06 18:01:18', u'DC01F54GH8D.aa201', None, 1814498434, 765651, u'2018-03-12 18:01:18', 168, 0, u'2018-03-12 18: 32:08.428032'], [None, u'https://aaa.com/p/cat.do?tags=|5555|4444|8888&zzz;A=\x80\x99s+Day+', u'00.00.00.000, 00.00.00.000', u'10707456', u'2018-03-06 18:01:02', u'76FD86AA.abd', None, 1814498440, 760960, u'2018-03-12 18:01:02', 168, 0, u'2018-03-12 18:32:08.805207']]
filename="table.csv"
with open(filename, "wb") as f:
    writer = csv.writer(f)
    writer.writerows(data)

但这会引发以下错误:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 152-153: ordinal not in range(128)

我花了很多时间试图解决这个问题,但没有成功。你能帮我解决这个问题吗?

我正在使用python 2.7

提前致谢

编辑: 我添加了导致问题的示例 + 我知道有一个类似的帖子,但它只处理一个字符串,在这里我想知道如何处理列表。

【问题讨论】:

  • 这听起来像是一个编码问题(参见here),但它也对我有用。
  • “使用二进制模式”如何与您报告的文本转换错误押韵?
  • @Rakesh 这是因为我发布的数据列表只是真实数据的一部分,我无法发布所有列表,因为它非常非常长,我找不到确切的元素导致错误
  • @usr2564301 没有回答用户的问题。 OP 没有隐式使用str

标签: python python-2.7 encoding


【解决方案1】:

有多种方法可以解决这个问题:

你可以试试:

from unidecode import unidecode
new_string = unidecode(string)

然后使用新字符串进行处理

如果 unidecode 不起作用,您也可以查看此链接:

https://stackoverflow.com/questions/3704731/replace-non-ascii-chars-from-a-unicode-string-in-python

【讨论】:

  • 我的数据是列表列表,我无法应用 unidecode 函数
  • 该代码也适用于我,因此我无法按原样为您提供具体的解决方案。我只能建议您将列表列表字符串化,然后运行 ​​unidecode,然后使用 json 解析它。
  • 非常感谢您的回答,现在我在帖子中添加了导致错误的项目
猜你喜欢
  • 2015-09-17
  • 2017-04-01
  • 2015-04-20
  • 2016-02-12
  • 2018-09-29
  • 2020-09-08
  • 1970-01-01
  • 2018-01-24
  • 2015-12-03
相关资源
最近更新 更多