Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 3, 2023 20:12:27

alex77bel
Зарегистрирован: 2023-01-11
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с кодировкой. Сломал голову

Здравствуйте! Не могу победить проблему с кодировкой.
Читаю данные с хед хантера, пишу их в файл. Все хорошо. Когда пытаюсь принтануть - получаю трейсбэк:

данные сохранены
Traceback (most recent call last):
File “D:\py_projects\job-parsing-k4\src\tmp.py”, line 25, in <module>
print(res)
File “C:\python 3.11.2\Lib\encodings\cp1251.py”, line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
UnicodeEncodeError: ‘charmap’ codec can't encode character ‘\u0138’ in position 147082: character maps to <undefined>

Process finished with exit code 1


Собственно, сам код.

 import requests
import json
FileName = 'test.json'
def get_data():
    params = {'area': 113, 'currency': 'RUR', 'page': 0, 'per_page': 100, 'only_with_salary': True,
              'search_field': 'name', 'text': 'python', 'salary': 200000}
    req = requests.get('https://api.hh.ru/vacancies', params)
    data = req.content.decode('utf-8')
    req.close()
    return data
def json_load():
    with open(FileName, encoding='utf-8') as f:
        j = json.load(f)
    return j
jsObj = json.loads(get_data())
with open(FileName, 'w', encoding='utf-8') as f:
    f.write(json.dumps(jsObj, ensure_ascii=False, indent=2))
print('данные сохранены')
res = json_load()
print(res)

Путем мучений выяснил, что ошибка возникает из-за строки
“Понимание ĸаĸ работает асинхронность в <highlighttext>python</highlighttext> и знаĸомство с asyncio. Опыт работы с микросервисной архитектурой. Опыт работы с FastAPI. ”,
а конкретно, из-за букв “ĸ” в словах “ĸаĸ” и “знаĸомство”, потому что это странные буквы с кодом ‘\u0138’, который дает ошибку.

Помогите, как сделать, чтобы в файле лежали только нормальные данные, которые не будут давать ошибку в принте?

Отредактировано alex77bel (Апрель 3, 2023 20:13:11)

Офлайн

#2 Апрель 4, 2023 02:18:58

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9863
Репутация: +  853  -
Профиль   Отправить e-mail  

Помогите с кодировкой. Сломал голову

alex77bel
а конкретно, из-за букв “ĸ” в словах “ĸаĸ” и “знаĸомство”, потому что это странные буквы с кодом ‘\u0138’, который дает ошибку.
wiki. буква кра

Ты просто перед сохранением в файл замени все эти юникод-последовательности через str.replace() с буквы кра на букву к.

Сделай переменную textout = json.dumps(…) и в ней меняй букву.



Офлайн

#3 Апрель 4, 2023 18:46:17

alex77bel
Зарегистрирован: 2023-01-11
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с кодировкой. Сломал голову

там же могут и другие сюрпризы быть подошли кодировки cp866 и ISO-8859-5 в формате
print(i.encode(encoding=“cp866”, errors=“replace”).decode(encoding=“cp866”))

Офлайн

#4 Апрель 4, 2023 22:03:06

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9863
Репутация: +  853  -
Профиль   Отправить e-mail  

Помогите с кодировкой. Сломал голову

И что, это похоже на букву к?

  
>>> text = 'abc \u0138 def'
>>> 
>>> text.encode(encoding='cp866', errors='replace').decode(encoding='cp866')
'abc ? def'
>>>

Я тебе говорю вот об этом
  
>>> text = 'abc \u0138 def'
>>> 
>>> textout = text.replace('\u0138', 'к')
>>> textout.encode(encoding='cp866', errors='replace').decode(encoding='cp866')
'abc к def'
>>>

alex77bel
там же могут и другие сюрпризы быть
Это вручную проставлено. И твоя задача - это всё обратить. Дебилоидов много в сети.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version