【问题标题】:Python except for UnicodeError?Python除了UnicodeError?
【发布时间】:2013-02-24 21:26:30
【问题描述】:

在我的代码中,我不断收到此错误...

UnicodeEncodeError: 'charmap' codec can't encode character '\u2013' in position 390: character maps to <undefined>

我尝试添加一个除了 UnicodeError 和 UnicodeEncodeError 之外的内容,但没有任何效果,问题是它是用户输入的,所以我无法控制他们输入的内容,所以我需要所有编码错误来显示显示错误而不是崩溃的打印程序...

try:
    argslistcheck = argslist[0]
    if argslistcheck[0:7] != "http://":
        argslist[0] = "http://" + argslist[0]
    with urllib.request.urlopen(argslist[0]) as url:
        source = url.read()
        source = str(source, "utf8")
    except urllib.error.URLError:
        print("Couln't connect")
        source = ""
    except UnicodeEncodeError:
        print("There was an error encrypting...")
        source = ""

追溯:

Traceback (most recent call last):
  ..... things leading up to error
  File "C:\path", line 99, in grab print(source)
  File "C:\Python33\lib\encodings\cp437.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_map)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u2013' in position 390: character maps to <undefined>

【问题讨论】:

  • 更有可能是程序的输出导致了错误; Unicode 数据会自动编码以匹配您的终端输出编码。您是在打印任何东西还是在写入文件?请包括该代码和完整的回溯。
  • 是的,它要么打印源代码,要么将其保存到 txt 文件中……它只在某些网站上执行,例如如果我在我的网站上执行,则不会,但如果我这样做用test.com 然后它会。我只是不希望程序崩溃。
  • 仔细查看traceback(最好与我们分享)。它告诉你什么操作失败了。

标签: python python-3.3


【解决方案1】:

试试这个:

source = str(source, encoding='utf-8', errors = 'ignore')

或查看this post's question

【讨论】:

    【解决方案2】:

    你的 print 失败了。您的 Windows 控制台不支持打印 UTF-8,您需要更改代码页:

    chcp 65001
    

    这是一个 Windows 命令,而不是 python 命令。您可能还需要切换字体,Lucida Sans Console 是一种 Unicode 字体,可以处理更多字形。

    【讨论】:

    • 是否有任何编码可以工作但不会给我字节错误?
    • @TrevorPeyton:问题是您的输入包含默认代码页 (437) 没有具有任何编码的代码点。 65001 是 UTF-8 的 MS 代码页,可以编码所有 Unicode。
    • 谢谢你,我是从他给我的 Ramces 链接中得到的。
    【解决方案3】:

    试试这个来替换 str(): source = source.encode('UTF-8')

    【讨论】:

    • 那行不通,我这样编码的原因是因为我将它从字节更改为字符串。如果我这样做,它会给我一个关于成为字节的不同错误。
    【解决方案4】:
    start_url="https://www.indeed.co.in/jobs?q=teacher&l=India"
    page_data=requests.get(start_url)
    soup=BeautifulSoup(page_data.text,"lxml")
    fname='1download'
    with open(fname,'w')as f:
        f.write(soup.prettify())
    f.close()
    
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
    UnicodeEncodeError: 'charmap' codec can't encode character '\u20b9' in position 
    235677: character maps to <undefined>
    

    这两个错误都可以通过将 utf-8 作为编码添加到文件来解决。另外请注意,您必须使用 open() 方法来打开文件

    f=open() 也会报错

    这是正确的代码:

     start_url="https://www.indeed.co.in/jobs?q=teacher&l=India"
     page_data=requests.get(start_url)
     soup=BeautifulSoup(page_data.text,"lxml")
     fname='1download'
     with open(fname,'w',encoding="utf-8")as f:
         f.write(soup.prettify())
     f.close()
    

    【讨论】:

    • 我在导致 UnicodeEncodeError 的 'open' 函数中缺少 ' encoding="utf-8" '。我添加后,错误消失了。
    猜你喜欢
    • 2020-03-07
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    • 1970-01-01
    • 2013-11-13
    • 2023-04-07
    • 2013-07-16
    • 2018-12-28
    相关资源
    最近更新 更多