【发布时间】:2016-12-07 10:43:11
【问题描述】:
我最近编写了一个脚本来从 pdf 中提取所有书签并将它们保存在 docx 文件中。它适用于 90% 的文件,但不幸的是有些文件似乎存在 unicode 问题。
我在这样的列表中获得书签:
[[u'3. Mechatronik f\xfcr Doppelkupplungsgetriebe, Sicherungshalter B, Sicherung 14 auf Sicherungshalter C', 2],
[u'4. Geber f\xfcr Getriebeeingangsdrehzahl, Hydraulikdruckgeber 1 f\xfcr automatisches Getriebe, Magnetventil 2, Magnetventil \x04, Magnetventil 5', 2],
[u'5. W\xe4hlhebel, Schalter f\xfcr W\xe4hlhebel in P gesperrt, Magnet f\xfcr W\xe4hlhebelsperre', 2],
[u'6. W\xe4hlhebel, Geber 2 f\xfcr Antriebswellendrehzahl, W\xe4hlhebel-Positionsanzeige', 2]]
当我尝试运行该函数时,我得到了错误:
ValueError('All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters',)
代码:
from docx import Document
list1 = [[u'3. Mechatronik f\xfcr Doppelkupplungsgetriebe, Sicherungshalter B, Sicherung 14 auf Sicherungshalter C', 2],
[u'4. Geber f\xfcr Getriebeeingangsdrehzahl, Hydraulikdruckgeber 1 f\xfcr automatisches Getriebe, Magnetventil 2, Magnetventil \x04, Magnetventil 5', 2],
[u'5. W\xe4hlhebel, Schalter f\xfcr W\xe4hlhebel in P gesperrt, Magnet f\xfcr W\xe4hlhebelsperre', 2],
[u'6. W\xe4hlhebel, Geber 2 f\xfcr Antriebswellendrehzahl, W\xe4hlhebel-Positionsanzeige', 2]]
def save_docx(list1):
document = Document('default.docx')
file = open("Error_Log.txt", 'w')
for i in list1:
try:
p = document.add_paragraph()
p.add_run(i[0]).bold = True
except Exception as e:
file.write(repr(e) + '\n')
file.close()
document.save('Bookmarks.docx')
save_docx(list1)
我猜问题出在\x0,但我不知道如何在不破坏整个文档的情况下删除这样的部分。
我已经尝试了不同的编码以及我可以在网上找到的任何其他东西,但到目前为止没有任何效果。
任何帮助将不胜感激!
【问题讨论】:
-
你试过了吗?
i[0].encode('utf-8')基于stackoverflow.com/questions/5760936/… 中的讨论 -
是的,我尝试以各种方式去编码和编码,例如
i[0].encode('ascii' 'ignore')等没有任何效果。还查看了可能有帮助但到目前为止没有运气的库。 -
来自@jackmorris 的好回答。难道是编码后控制字符仍在字符串中?因此最终结果将是相同的(错误“无控制字符”)