无法让我的python脚本替换\ u代码

时间:2018-10-22 00:12:14

标签: python unicode-escapes

我正在处理源自网站的本地目录中的HTML文件,并在Windows 10上的Notepad ++中进行开发。这些文件自称为'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浏览器中阅读的文本,但是Caliber epub构建器仍无法正确解释\u2019。我尝试使用this question/solution,但无法识别\ u代码。

是否有可能的解决方法,或者是否有一些指针可以更好地解决我的问题?

编辑:忘记添加,我正在写with open('log.txt', 'w+'):。我以前使用过encoding='utf-8',但情况似乎更糟了。

1 个答案:

答案 0 :(得分:0)

经过一周的搜索,终于在Removing unicode \u2026 like characters in a string in python2.7此处发布后找到了答案。顺便说一句,我正在使用Python 3.6,因此它与python版本无关。

(output, 'w+')

无论有没有编码,我仍然需要研究{{1}}的变体。无论如何...这终于给了我最好的结果。