2015-07-18 3 views
0

Прежде чем кто-нибудь скажет, что это дублированный вопрос, я просто хочу сообщить вам, что ошибка, которую я получаю от запуска этой программы в командной строке, отличается от всех других связанных вопросы, которые я видел.Программа Python работает в IDLE, но не в командной строке

Я пытаюсь запустить очень короткий скрипт в 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? Благодаря!

EDIT:

Моя проблема вызвана print(soup.prettify()) но type(soup.prettify()) возвращается str?

ПОСТАНОВИЛИ:

я, наконец, было принято решение использовать encode() и decode() из-за проблем, что было вызвано. Если кто-то знает, как реально решить вопрос, пожалуйста, сделайте это; также, благодарю вас за все ваши ответы

+0

Не видя кодировки символов, объявленной на этой странице. – stark

+0

Сделайте ctrl + f для charset пожалуйста – ytpillai

+0

Я думаю, что это первый метатег в 'head' – ytpillai

ответ

0

I наконец, принял решение использовать encode() и декодировать() из-за проблемы, которая была причиной редакторЕсли кто-то знает, как реально решить вопрос, пожалуйста, сделайте это; также, благодарю вас за все ваши ответы

0

I just want to let you know that the error I am getting from running this program in command line is different from all the other related questions I've seen.

Не совсем. У вас есть PrintFails, как и все остальные.

Консоль Windows не может печатать Юникод. (Это не совсем так, но в точности, почему, когда и как вы можете получить Unicode из консоли, это болезненное упражнение, и обычно это не стоит.) Пытаясь напечатать символ, которого нет в ограниченной кодировке консоли не может работать, поэтому Python дает вам ошибку.

print them out (which I need an easier solution to because I cannot do .encode("utf-8") for a lot of elements

Вы можете запустить команду set PYTHONIOENCODING=utf-8 перед запуском сценария сказать Python для использования и кодирования, которые могут включать в себя любые символы (так что никаких ошибок), но и любой выход, не ASCII все-таки будет с искажениями, как выиграл его кодирование 't соответствует фактической кодовой странице консоли.

(Или действительно просто использовать IDLE.)

+0

Моя проблема в том, что мне это нужно на сервере localhost, а мои данные в байтах – ytpillai

3

UnicodeEncodeError: 'charmap' codec can't encode character '\u025c'

Кодировка символов консоли не может представлять '\u025c' i.e., "ɜ" Unicode character (U+025C LATIN SMALL LETTER REVERSED OPEN E).

What is it that IDLE is automatically doing?

IDLE отображает Unicode напрямую (только символы BMP), если соответствующий шрифт поддерживает указанные символы Юникода.

Can I use IDLE's interpretation program instead of python.exe

Да, запустите:

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

Примечание: вы можете записывать произвольные символы Unicode в консоли Windows, если используется Unicode API:

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

Я бы изменил «отображение произвольных символов Unicode в консоли Windows» на что-то вроде «write Unicode на консоль». Доступные шрифты зависят от локали Windows, а окно консоли не поддерживает смешивание символов полуширины с символами полной ширины (CJK), то есть символ не может отображаться на 2 ячейки. Он также ограничен BMP, потому что каждая ячейка хранит один код 'wchar_t', который исключает использование суррогатных пар UTF-16. – eryksun

+1

Однако эти ограничения обусловлены тем, как работает conhost.exe, а не сам API консоли. Вы можете скрыть окно, созданное conhost.exe, и вместо этого отобразить буфер экрана консоли в окне с более гибкой поддержкой шрифтов. Вот что делает [ConEmu] (http://conemu.github.io). – eryksun

+0

@eryksun: да, астральные символы отображаются как квадраты, даже если шрифт поддерживает символы. Если вы копируете ящики и вставляете их, например, в блокнот, символы отображаются правильно. – jfs

Смежные вопросы