UnicodeEncodeError: 'ascii'编解码器无法在位置126处编码字符u'\u2019':序数不在范围内(128)

7

好的,我已经阅读了许多类似的问题,并且我相信我正确地遵循了建议,但不知何故我的代码仍然无法工作。

我解析了一个XML文件。我在这里读到输出现在是unicode。我正在使用csv writer将输出写入文件。

因此,在我的代码中,我尝试在使用writerow之前进行utf-8编码。为什么我仍然会在writerow上收到错误?直到发生此错误时,我的警告“unicode!!!”才会被抛出(我正在多个文件上运行此操作,并且对大多数文件有效)。实际上,我不理解为什么writerow正在尝试使用ascii,而不是应该期望utf-8?我已经用ascii替换了encode函数中的utf-8以获得同样的结果。请帮助!

        try:

           mystring=elem.find('./'+r2+'Description').text


           if isinstance(mystring, unicode):
               print("unicode!!!")
               mystring.encode('utf-8','ignore')
               datalist.append(mystring)
           else:    
               datalist.append(mystring)
        except AttributeError:
           datalist.append('No text')  

        c.writerow(datalist)

1
我已经解析了一个XML文件。我在这里读到输出现在是Unicode。以下是如何解析XML的示例代码。 - Karl Knechtel
1个回答

9
当您调用 mystring.encode(... 时,它并不是在原字符串上进行更改;而是返回一个新的字符串。

新字符串叫什么? - user1106322
哦,太棒了,我的字符串2=mystring.encode(...)然后附加mystring2有效!谢谢! - user1106322
它没有特定的名称,它是一个返回值。原因是(a)字符串(包括Unicode和字节串)是不可变的;(b)即使它们是可变的,这两种类型也是不同的,所以Unicode字符串不能直接转换为编码的字节串。 - Karl Knechtel
好的,明白了。非常感谢这个简单的提示! - user1106322

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接