UnicodeDecodeError:“ascii”编解码器无法对字符u“\u2019”进行编码

2024-10-01 11:24:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直收到下面的错误,似乎无法使.encode('ascii', errors='ignore')工作。在

eqs = soup.find_all('div', {'style': 'margin:7px 5px 0px;vertical-align:top;text-align:center;display:inline-block;line-height:normal;width:120px;'})

for equipment in eqs:
    if '#b0c3d9' in str(equipment):
        f2.write(equipment.getText() + ', Common\n')
    if '#5e98d9' in str(equipment):
        f2.write(equipment.getText() + ', Uncommon\n')
    if '#4b69ff' in str(equipment):
        f2.write(equipment.getText() + ', Rare\n')
    if '#8847ff' in str(equipment):
        f2.write(equipment.getText() + ', Mythical\n')
    if '#b28a33' in str(equipment):
        f2.write(equipment.getText() + ', Immortal\n')
    if '#d32ce6' in str(equipment):
        f2.write(equipment.getText() + ', Legendary\n')
    if '#eb4b4b' in str(equipment):
        f2.write(equipment.getText() + ', Ancient\n')
    if '#ade55c' in str(equipment):
        f2.write(equipment.getText() + ', Arcana\n')

我试过:

^{pr2}$

以及

f2.write(equipment.encode('ascii', errors='ignore').getText())

还有一些我羞于发表的东西。比如在beauthulsoup以后读取的文件中运行它,但这只是抛出了一个不同的错误。再次感谢你的帮助。在

完全回溯:

Traceback (most recent call last):
 File "<pyshell#285>", line 1, in <module>
  import D2soup1
 File "D2soup1.py", line 86, in <module>
  test()
 File "D2soup1.py", line 30, in test
  f2.write(equipment.getText() + ', Immortal\n')
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 5:     ordinal not in range(128)

我使用字符串从下面的html中解析出方框阴影。我知道这可能不是最好的做法,但这是我唯一能想到的办法。还是新来的美女。在

<div style="margin:7px 5px 0px;vertical-align:top;text-align:center;display:inline-block;line-height:normal;width:120px;"><div style="margin-bottom: 5px;box-shadow:0px 0px 2px 4px #5e98d9;"><a href="/Pirate_Slayer%27s_Tricorn" title="Pirate Slayer's Tricorn"><img alt="Pirate Slayer's Tricorn" src="http://hydra-media.cursecdn.com/dota2.gamepedia.com/thumb/7/79/Pirate_Slayer%27s_Tricorn.png/120px-Pirate_Slayer%27s_Tricorn.png" width="120" height="80" srcset="http://hydra-media.cursecdn.com/dota2.gamepedia.com/thumb/7/79/Pirate_Slayer%27s_Tricorn.png/180px-Pirate_Slayer%27s_Tricorn.png 1.5x, http://hydra-media.cursecdn.com/dota2.gamepedia.com/thumb/7/79/Pirate_Slayer%27s_Tricorn.png/240px-Pirate_Slayer%27s_Tricorn.png 2x"></a></div>

Tags: indivcomifpnglineencodewrite
1条回答
网友
1楼 · 发布于 2024-10-01 11:24:34

您正在使用没有编解码器的str(equipment);您正在将Tag对象编码为ASCII。在

不要使用str;将文本一次作为unicode值。并使用一个映射和一个循环来代替那么多if语句。在

在这种情况下,style属性是您需要测试的全部内容:

types = {
    '#b0c3d9': 'Common',
    '#5e98d9': 'Uncommon',
    '#4b69ff':'Rare',
    '#8847ff': 'Mythical',
    '#b28a33': 'Immortal',
    '#d32ce6': 'Legendary',
    '#eb4b4b': 'Ancient',
    '#ade55c': 'Arcana'
}

for equipment in eqs:
    style = equipment.div.attrs.get('style', '')
    textcontent = equipment.getText().encode('utf8')
    for key in types:
        if key in style:
            f2.write('{}, {}'.format(textcontent, types[key])

但是,最有可能的是,这些颜色代码在equipment标记的属性中;只查看标记值,或者使用.find()调用缩小搜索范围。在

相关问题 更多 >