Python程序在IDLE中运行,但不在命令行中运行

时间:2015-07-18 18:44:42

标签: python windows python-3.x unicode

在有人说这是一个重复的问题之前,我只是想让你知道我在命令行中运行这个程序所得到的错误与我见过的所有其他相关问题不同。

我正在尝试在Python中运行一个非常短的脚本

from bs4 import BeautifulSoup
import urllib.request




html = urllib.request.urlopen("http://dictionary.reference.com/browse/word?s=t").read().strip()
dhtml = str(html, "utf-8").strip()
soup = BeautifulSoup(dhtml.strip(), "html.parser")
print(soup.prettify())

但是当我使用python.exe运行此程序时,我一直收到错误。 UnicodeEncodeError: 'charmap' codec can't encode character '\u025c。我已经尝试了很多方法来解决这个问题,但我设法将其与将字节转换为字符串的问题隔离开来。当我在IDLE中运行此程序时,我按预期获得HTML。 IDLE自动做什么?我可以使用IDLE的解释程序而不是python.exe吗?谢谢!

编辑:

我的问题是由print(soup.prettify())引起的,但type(soup.prettify())返回str

解决:

我最终决定使用encode()decode(),因为已经造成了麻烦。如果有人知道如何真正解决问题,请做;还有,谢谢你的所有答案

3 个答案:

答案 0 :(得分:3)

  

UnicodeEncodeError:' charmap'编解码器无法对字符' \ u025c'

进行编码

控制台字符编码不能代表'\u025c' i.e., "ɜ" Unicode character (U+025C LATIN SMALL LETTER REVERSED OPEN E)

  

IDLE自动做什么?

如果相应的字体支持给定的Unicode字符,则IDLE直接显示Unicode(仅限BMP字符)。

  

我可以使用IDLE的解释程序而不是python.exe

是的,运行:

T:\> py -midlelib -r your_script.py

注意:如果使用Unicode API,您可以将任意Unicode字符写入Windows控制台:

T:\> py -mpip install win-unicode-console
T:\> py -mrun your_script.py

请参阅What's the deal with Python 3.4, Unicode, different languages and Windows?

答案 1 :(得分:0)

  

我只想告诉您,我在命令行中运行此程序时遇到的错误与我见过的所有其他相关问题不同。

不是真的。你和其他人一样PrintFails

Windows控制台无法打印Unicode。 (这不是严格正确的,但要明确原因,何时以及如何将Unicode从控制台中取出是一项痛苦的练习,通常不值得。)尝试打印一个不属于的角色。控制台的有限编码无法正常工作,因此Python会给你一个错误。

  

将它们打印出来(我需要一个更简单的解决方案,因为我不能为很多元素做.encode(" utf-8")

您可以在运行脚本之前运行命令set PYTHONIOENCODING=utf-8以告诉Python使用和编码可以包含任何字符(因此没有错误),但任何非ASCII输出仍然会出现乱码,因为其编码赢了& #39; t匹配控制台的实际代码页。

(或者确实只是使用IDLE。)

答案 2 :(得分:0)

我最终决定使用encode()和decode(),因为已经造成了麻烦。如果有人知道如何真正解决问题,请做;还有,谢谢你的所有答案