Кодирование вывода задачи в VSCode

Я изучаю BeautifullSoup с кодом Visual Studio, и когда я запускаю этот скрипт:

import requests
from bs4 import BeautifulSoup
from fake_useragent import UserAgent

ua = UserAgent()
header = {'user-agent':ua.chrome}
google_page = requests.get('https://www.google.com',headers=header)

soup = BeautifulSoup(google_page.content,'lxml') # html.parser

print(soup.prettify())

И я получаю следующую ошибку:

Трассировка (последний последний вызов): Файл "c:\ ... \intro-to-soup-2.py", строка 13, в печати (soup.prettify()) Файл "C:\ ... \Local \Programs\Python\Python36-32\lib\encodings\cp1252.py", строка 19, в кодировке возврата codecs.charmap_encode(input,self.errors,encoding_table)[0] UnicodeEncodeError: кодек 'charmap' не может кодировать символ '\U0001f440' в позиции 515: сопоставление символов с

Если я форсирую кодировку utf-8 в переменной супа, я не смогу использовать prettify, так как он не работает со строками... Также пытался использовать # -- coding: utf-8 -- в первой строке кода без успеха.

Вот мои tasks.json для этого проекта:

{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "0.1.0",
"command": "python",
"isShellCommand": true,
"args": ["${file}"],
"files.encoding": "utf8",
// Controls after how many characters the editor will wrap to the next line. Setting this to 0 turns on viewport width wrapping (word wrapping). Setting this to -1 forces the editor to never wrap.
"editor.wrappingColumn": 0, // default value is 300
// Controls the font family.
"editor.fontFamily": "Consolas, 'Malgun Gothic', '맑은 고딕','Courier New', monospace",
// Controls the font size.
"editor.fontSize": 15,
"showOutput": "always"
}

Точно такой же код работает в PyCharm без проблем. Любые идеи, как я могу исправить это в коде Visual Studio?

Вот мой результат "заморозки пипсов":

astroid==1.5.3
beautifulsoup4==4.5.3
colorama==0.3.9
fake-useragent==0.1.7
html5lib==0.999999999
isort==4.2.15
lazy-object-proxy==1.3.1
lxml==3.7.2
mccabe==0.6.1
pylint==1.7.1
requests==2.12.5
selenium==3.4.3
six==1.10.0
webencodings==0.5
wrapt==1.10.10
xlrd==1.0.0
XlsxWriter==0.9.6

Спасибо за ваше время,

Юнито.


person Eunito    schedule 23.06.2017    source источник
comment
Являются ли pycharm и VScode одной и той же установкой python?   -  person pvg    schedule 23.06.2017
comment
Как узнать, какую версию я использую в VSCode? Я установил PyCharm сегодня, поэтому я предполагаю, что он использует последнюю версию   -  person Eunito    schedule 23.06.2017
comment
@Eunito Запустите это как скрипт в VSCode: import sys; print('Python %s on %s' % (sys.version, sys.platform)). Кроме того, pycharm может использовать любую имеющуюся у вас установку (если у вас несколько установок), поэтому его недавняя загрузка не гарантирует, что он запускает последнюю версию Python.   -  person TrakJohnson    schedule 23.06.2017
comment
Запустил это на pycharm и VSC, и на выходе был Python 3.6.0 (v3.6.0:41df79263a11, 23 декабря 2016 г., 07:18:10) [MSC v.1900 32 бит (Intel)] на win32   -  person Eunito    schedule 23.06.2017
comment
редактировать - только что обновил python до последней версии, а проблема продолжает возникать :(   -  person Eunito    schedule 23.06.2017
comment
Можете ли вы разделить prettify и print, а также включить полную трассировку?   -  person pvg    schedule 23.06.2017
comment
Также куда идет вывод этого бизнеса tasks.json? Что происходит в VSCode, когда вы щелкаете правой кнопкой мыши окно редактора и просто говорите «Запустить файл Python в терминале»? Я думаю, что это как-то связано с тем, куда вы пытаетесь вывести данные, а не с BS4. Похоже, он задыхается при преобразовании смайликов в cp1252. Этого не происходит в консоли PyCharm, потому что консоль PyCharm поддерживает юникод. Тем не менее, VSCode тоже должен быть.   -  person pvg    schedule 23.06.2017
comment
@pvg - в терминале все работает нормально: / как я могу заставить VSC использовать правильную версию, если это так?   -  person Eunito    schedule 23.06.2017
comment
Ну и к чему этот вывод? Стандартная консоль Windows? Вам действительно нужно печатать гигантские груды html с эмодзи на консоли?   -  person pvg    schedule 23.06.2017
comment
Это происходит, даже если я пытаюсь найти определенный контент div...   -  person Eunito    schedule 23.06.2017
comment
редактировать Эта проблема возникает, даже если я пытаюсь найти определенный контент div... Я просто хотел бы исправить это, поэтому, когда я нажимаю Ctrl+Shift+B, он показывает правильный вывод без необходимости использования правую кнопку и запустите терминал... :/ если это невозможно, мне придется придерживаться этого! эхехе   -  person Eunito    schedule 23.06.2017
comment
Я зарегистрировал это как ошибку в VSCode, вы можете отследить, что с ней происходит здесь. github.com/Microsoft/vscode/issues/29358   -  person pvg    schedule 24.06.2017
comment
Спасибо за вашу помощь и терпение!   -  person Eunito    schedule 25.06.2017


Ответы (1)


Проблема здесь, похоже, заключается в кодировке, которую интерпретатор Python считает поддержкой stdout/stderr. По какой-то причине (возможно, ошибка в VSCode) для него установлено значение, зависящее от платформы (для вас cp1252 в Windows, я смог воспроизвести проблему в OS X и получил ascii) вместо utf-8, который выводит VSCode оконные опоры. Вы можете изменить свой task.json, чтобы он выглядел примерно так, чтобы решить эту проблему — он устанавливает переменную среды, заставляющую интерпретатор Python использовать utf8 для вывода.

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "0.1.0",
    "command": "python3",
    "isShellCommand": true,
    "args": ["${file}"],
    "showOutput": "always",
    "options": {
        "env": {
            "PYTHONIOENCODING":"utf-8"
        }
    }
}

Соответствующий бит - это словарь "options".

person pvg    schedule 23.06.2017
comment
вы, сэр, БОГ! Благодарю вас! - person Eunito; 23.06.2017
comment
как установить кодировку cpp? - person Rainning; 07.04.2020