не могу заставить мой скрипт на python заменить \ u коды - PullRequest
0 голосов
/ 22 октября 2018

Я обрабатываю 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', но это, казалось, ухудшало ситуацию.

1 Ответ

0 голосов
/ 22 октября 2018

Неделя поиска и, наконец, после ответа здесь нашел ответ, Удаление символов Unicode \ u2026 в строке в python2.7 .Кстати, я работаю в Python 3.6, поэтому он не связан с версией Python.

with open(output, 'w+') as out:
    ::: <<<=== code
    line = line.encode('utf-8').decode('ascii','ignore')`
    out.write(line)

Мне все еще нужно работать с вариациями (output, 'w+') с кодировкой и без нее.Во всяком случае ... это, наконец, дало мне лучшие результаты.

...