INDMops
@INDMops
Парень с небольшой историей...

Как перевести кодировку latin-1 в utf-8?

есть папка с очень большим количество файлов txt формата. И у меня била задача найти среди етих файлов определенный текст.(то есть перебрать весь текст в файлах). И я написал такой код, но вот у меня возникла проблема, в тексте есть не только кириллица, но и латиница и коды в шестнадцатеричной системе.
Пример:
0x005B85BC = Wheeler, Rawson & Co.

0x00668D66 = Колтер

0x006A581E = Самогонщикам на заметку:~n~соберите оставшиеся после костра угли и процедите через них полученный самогон, чтобы очистить продукт от примесей.

0x007065EC = Брошюра с рецептом особого чудодейственного зелья.

0x0071467D = БЫВШИЙ СТРЕЛОК, СТАВШИЙ МАРШАЛОМ.~n~~n~ПОСЛЕДНИЙ РАЗ ЗАМЕЧЕН В АННЕСБЕРГЕ.

0x00718925 = Выбрать подтяжки.

0x00732098 = Шляпа «Феркрофт»

0x0073F497 = Улучшить повозку Штрауса

0x00740D9A = Облачите ваших детей в приличную одежду и обувь от Wheeler, Rawson & Co.

Вот сам код поиска(я не программист, потому не судите сильно код):
import os

text = input('Введите текст: ')

strings = []

for root, dirs, files in os.walk('txt'):
    for filename in files:
        if filename.endswith('.txt'):
            path = f'{root}\{filename}'
            with open(path, 'r', encoding='utf-8') as f:
                for string in f:
                    if text in string:
                        line = dict()
                        line['file'] = filename
                        line['string'] = string
                        strings.append(line)
                        
if strings == []:
    print('Текст не был найден среди всех файлов!')
else:
    for i in strings:
        print(f'Файл: {i["file"]}, з текстом:\n{i["string"]}')


Код ошибки:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xcf in position 16: invalid continuation byte

Я также менял тик кодировки на latin-1, тогда код запускался, но оно не искало текст.
Я так понимаю когда оно проверяет каждое слово в тексте и попадает например на 0x0071467D и случается та ошибка, потому что ето шестнадцатеричная система, а не двоичная. То есть текст нужно переводить еще в бинар?
  • Вопрос задан
  • 344 просмотра
Решения вопроса 1
INDMops
@INDMops Автор вопроса
Парень с небольшой историей...
Все оказалось очень просто. Не нужно било переводить весь файл в кодировку, а только ту строку которую ми перебираем:
...
for string in f:
    str_encode = string.encode(encoding = 'UTF-8')
    
    str_decode = str_encode.decode()
                    
    if text in str_decode:
        line = dict()
        ...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы