Я обрабатываю HTML-файлы в локальном каталоге, созданном на веб-сайте, и занимаюсь разработкой в Notepad ++ для Windows 10. Эти файлы претендуют на звание 'utf-8', но имеют большой объем кода скрипта.При записи в файл я могу получить \ u #### коды и \ x ## коды и символы мусора, но не полный человеческий код.В основном коды \ u2019 не преобразуются, но несколько других тоже не учитываются.
with open(self.srcFilename, 'r', encoding='utf8') as f:
self.rawContent = f.read()
f.close()
soup = BeautifulSoup(self.rawContent, 'lxml')
:::: <<<=== other tag processing code
for section in soup.find('article'):
nextNode = section
if soup.find('article').find('p'):
::: <<<=== code to walk through tags
if tag_name == "p":
storytags.append(nextNode.text)
::: <<<=== conditions to end loop
i=1
for line in storytags:
print("[line %d] %s" % (i, line))
logger.write("[line %d] %s\n" % (i, line))
i+=1
setattr(self, 'chapterContent', storytags)
Без кодировки utf-8
я получаю ошибку
File "C:\Python\Python36\lib\encodings\cp1252.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 52120: character maps to <undefined>
Таким образом, для чтения файла используется кодировка utf-8
.Если я делаю консольную печать, из приведенного выше раздела она печатается разборчиво / разборчиво (?).Тем не менее, запись в файл дает мне мусорные символы, такие как They’ve
вместо They've
и “Let’s
вместо "Let's
.
После долгих чтений, ближе всего я пришел кполучить удобочитаемый вывод - изменить мой оператор write (), но у меня все еще остаются случайные коды.
(1) logger.write("[line %d] %s\n" % (i, line.encode('unicode_escape').decode()))
(2) logger.write("[line %d] %s\n" % (i, line.encode().decode('utf-8)))
Первое утверждение дает мне текст, а также коды \ u #### и несколько кодов \ xa0.Второе утверждение генерирует HTML-файл с текстом, который я могу прочитать в HTML-браузере, но \u2019
по-прежнему не корректно интерпретируется эпибостроителем Caliber.Я пытался использовать этот вопрос / решение , но он не распознает код \ u.
Возможно ли исправить проблему или есть несколько советов, как лучше справиться с моей проблемой?может быть?
РЕДАКТИРОВАТЬ: Забыл добавить, я пишу with open('log.txt', 'w+'):
.Раньше я использовал encoding='utf-8'
, но это, казалось, ухудшало ситуацию.