我正在处理源自网站的本地目录中的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'
,但情况似乎更糟了。
答案 0 :(得分:0)
经过一周的搜索,终于在Removing unicode \u2026 like characters in a string in python2.7此处发布后找到了答案。顺便说一句,我正在使用Python 3.6,因此它与python版本无关。
(output, 'w+')
无论有没有编码,我仍然需要研究{{1}}的变体。无论如何...这终于给了我最好的结果。