Python ошибка Юникода в linux, но не windows - PullRequest
0 голосов
/ 04 февраля 2020

Я следовал некоторым руководствам, чтобы собрать воедино этот бит python

import requests
import sys
from bs4 import BeautifulSoup

url = requests.get(sys.argv[1])

html = BeautifulSoup(url.content,'html.parser')

for br in html.find_all("br"):
    br.replace_with(" ")

for tr in html.find_all('tr'):
    data = []   

    for td in tr.find_all('td'):
        data.append(td.text.strip())

    if data:
        print("{}".format(','.join(data)))

В Windows он работает так, как я ожидаю.

В Linux Я получаю

Traceback (most recent call last):
  File "html2csv.py", line 19, in <module>
    print("{}".format(','.join(data)))
UnicodeEncodeError: 'ascii' codec can't encode character u'\xb0' in position 4: ordinal not in range(128)

Что мне нужно изменить в моем скрипте, чтобы предотвратить это? Я читал, что вы можете игнорировать проблемные символы, но некоторые говорят, что это не правильный способ сделать это? Не уверен, как реализовать какое-либо решение, которое я нашел в том, что у меня есть.

Ответы [ 3 ]

1 голос
/ 04 февраля 2020

Извините за потраченное время 1008 *

python3 script.py
0 голосов
/ 04 февраля 2020

Вероятно, ваша кодировка Python IO по какой-то причине установлена ​​на ascii (вероятно, из-за неправильно настроенных настроек локали системы), поэтому все, что выводится на стандартный вывод (и считывается из стандартного ввода), интерпретируется как ASCII.

Установите переменную окружения PYTHONIOENCODING на utf-8 перед запуском скрипта (или еще лучше, убедитесь, что настройки locale в вашей системе верны).

0 голосов
/ 04 февраля 2020

У меня была та же проблема, похоже, что кодирование в MS Windows оставляет некоторые призрачные символы (возможно, вы можете настроить свою IDE так, чтобы это не делалось).

Попробуйте добавить # -*- coding: utf-8 -*- в верхней части ваш файл скрипта, как здесь:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# import ipdb; ipdb.set_trace()

import json
import os, sys

class CSV_LOADER():
    """
    Script that handles batch credentials (in CSV format), both locally and
    to remote machines.

...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...