【发布时间】:2016-10-16 09:22:15
【问题描述】:
我有一个包含 lxml.etree._ElementStringResult 和 lxml.etree._ElementUnicodeResult 的列表内容
for x in contents:
final_content += (x.encode('utf-8')) + '\n'
和
final_content = reduce(lambda a, x: a+x.encode('utf-8') + '\n', contents)
第一个代码运行良好,而第二个代码引发 unicode 解码错误。
<ipython-input-129-17a363dfff6c> in <lambda>(a, x)
----> 1 final_content = reduce(lambda a, x: a+x.encode('utf-8') + '\n', contents)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position
37: ordinal not in range(128)
编辑:
reduce 失败,因为第一个元素未编码。
当我将代码更改为
final_content = contents[0]
for x in range(1,len(contents)):
final_content += contents[x].encode('utf-8')
它引发了与上面的 reduce 块相同的错误。
【问题讨论】:
-
离题:
final_content = u'\n'.join( [x.encode('utf-8') for x in contents] ) -
@bhargav 这个问题是关于reduce而不是编码的问题。
-
@danihp 该评论是为那些将问题关闭为重复的模组的。
-
好吧,我在@hjpotter92 答案中发布了我的答案。我希望他不要难过。
-
@danihp 是的,谢谢我想通了,并用
reduce(lambda a, x: a+x.encode('utf-8') + '\n', contents, contents[0].encode('utf-8'))替换了代码应该在想通后编辑问题。
标签: python loops functional-programming python-unicode