@maximsemin23

Почему слетает кодировка?

Есть у меня код:
from json import dump
from bs4 import BeautifulSoup
from requests import get


def parse():
    request = get('https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B4%D0%BE%D0%BC%D0%B5%D0%BD%D0%BE%D0%B2_%D0%B2%D0%B5%D1%80%D1%85%D0%BD%D0%B5%D0%B3%D0%BE_%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D1%8F')
    request.encoding = 'utf-8'
    soup = BeautifulSoup(request.text, 'html.parser')
    tables = soup.find_all('table')
    table = tables[3]

    trs = table.find_all('tr')
    del trs[0]
    country = []

    for tr in trs:
        td = tr.find_all('td')
        country.append(td[1].text)

    for i in range(len(country)):
        country[i] = country[i].replace(u'\xa0', u'')

    with open(r'D:\API\translate.json', 'w', encoding='utf-8') as file:
        dump(country, file)

if __name__ == '__main__':
    parse()


translate.json после выполнения программы:
spoiler
["\u041e\u0441\u0442\u0440\u043e\u0432 \u0412\u043e\u0437\u043d\u0435\u0441\u0435\u043d\u0438\u044f", "\u0410\u043d\u0434\u043e\u0440\u0440\u0430", "\u041e\u0410\u042d", "\u0410\u0444\u0433\u0430\u043d\u0438\u0441\u0442\u0430\u043d", "\u0410\u043d\u0442\u0438\u0433\u0443\u0430 \u0438 \u0411\u0430\u0440\u0431\u0443\u0434\u0430", "\u0410\u043d\u0433\u0438\u043b\u044c\u044f", "\u0410\u043b\u0431\u0430\u043d\u0438\u044f", "\u0410\u0440\u043c\u0435\u043d\u0438\u044f", "\u041d\u0438\u0434\u0435\u0440\u043b\u0430\u043d\u0434\u0441\u043a\u0438\u0435 \u0410\u043d\u0442\u0438\u043b\u044c\u0441\u043a\u0438\u0435 \u043e\u0441\u0442\u0440\u043e\u0432\u0430", "\u0410\u043d\u0433\u043e\u043b\u0430", "\u0410\u043d\u0442\u0430\u0440\u043a\u0442\u0438\u043a\u0430", "\u0410\u0440\u0433\u0435\u043d\u0442\u0438\u043d\u0430", "\u0410\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u043e\u0435 \u0421\u0430\u043c\u043e\u0430", "\u0410\u0432\u0441\u0442\u0440\u0438\u044f", "\u0410\u0432\u0441\u0442\u0440\u0430\u043b\u0438\u044f", "\u0410\u0440\u0443\u0431\u0430", "\u0410\u043b\u0430\u043d\u0434\u0441\u043a\u0438\u0435 \u043e\u0441\u0442\u0440\u043e\u0432\u0430", "\u0410\u0437\u0435\u0440\u0431\u0430\u0439\u0434\u0436\u0430\u043d", "\u0411\u043e\u0441\u043d\u0438\u044f \u0438 \u0413\u0435\u0440\u0446\u0435\u0433\u043e\u0432\u0438\u043d\u0430", "\u0411\u0430\u0440\u0431\u0430\u0434\u043e\u0441", "\u0411\u0430\u043d\u0433\u043b\u0430\u0434\u0435\u0448", "\u0411\u0435\u043b\u044c\u0433\u0438\u044f", "\u0411\u0443\u0440\u043a\u0438\u043d\u0430-\u0424\u0430\u0441\u043e", "\u0411\u043e\u043b\u0433\u0430\u0440\u0438\u044f", "\u0411\u0430\u0445\u0440\u0435\u0439\u043d", "\u0411\u0443\u0440\u0443\u043d\u0434\u0438", "\u0411\u0435\u043d\u0438\u043d", "\u0411\u0435\u0440\u043c\u0443\u0434\u044b", "\u0411\u0440\u0443\u043d\u0435\u0439", "\u0411\u043e\u043b\u0438\u0432\u0438\u044f", "\u0411\u0440\u0430\u0437\u0438\u043b\u0438\u044f", "\u0411\u0430\u0433\u0430\u043c\u0441\u043a\u0438\u0435 \u041e\u0441\u0442\u0440\u043e\u0432\u0430", "\u0411\u0443\u0442\u0430\u043d", "\u041e\u0441\u0442\u0440\u043e\u0432 \u0411\u0443\u0432\u0435", "\u0411\u043e\u0442\u0441\u0432\u0430\u043d\u0430", "\u0411\u0435\u043b\u043e\u0440\u0443\u0441\u0441\u0438\u044f"]


Я везде указал кодировку utf-8, так что по идее всё должно работать

UPD: если пишу
print(country)
То выводится нормально
  • Вопрос задан
  • 244 просмотра
Решения вопроса 2
Vindicar
@Vindicar
RTFM!
Читай документацию на json.dump(), точнее на параметр ensure_ascii.

If ensure_ascii is true (the default), the output is guaranteed to have all incoming non-ASCII characters escaped. If ensure_ascii is false, these characters will be output as-is.
Ответ написан
SoreMix
@SoreMix Куратор тега Python
yellow
dump(country, file, ensure_ascii=False)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы