jinja+form+unicode控制字符+xml/docx集成

2024-05-19 17:39:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建基于用户在表单中输入的word文档。但是,当用户输入一个unicode控制字符,并试图使用python-docx包将其作为word文件时,会出现以下错误:

File "src\lxml\apihelpers.pxi", line 1439, in lxml.etree._utf8
ValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters

通过在每个请求之前检查表单中是否存在无效的xml字符(我有许多表单可能会出现此问题),并从字段中删除任何无效的xml字符,从而成功地解决了这个问题。然后我创建了一个新的不可变多字典,并用干净的文本填充它。

^{pr2}$

这种方法非常有效。然而,我似乎不太可能是唯一一个有这个问题的人,但我却找不到任何干净的解决办法。所以问题是,我真的应该用现在的方式来解决这个问题吗?这很乏味,感觉好像我忽略了一些Flask或pythondocx设置或参数,它们可以解决这个问题。

这个例子是全功能的,如果复选框被选中,则执行before_request函数。如果未选中该复选框,则不会执行该复选框,并显示所述的服务器错误。

enter image description here

控制字符是:U+000C : <control-000C> (FORM FEED [FF])


Tags: or文件用户文档表单错误unicodexml
1条回答
网友
1楼 · 发布于 2024-05-19 17:39:34

unicode中有大量的控制字符。因此,基本上,您需要删除控制字符,这是unicode字符中的一个类别。为此,我建议您使用来自unicodedata模块的unicodedata.category。在

参见以下代码:

import unicodedata


def remove_control_chars(s):
    return "".join(ch for ch in s if unicodedata.category(ch)[0] != "C")

相关问题 更多 >