Python openpyxl中的所有非法字符是什么?

Python openpyxl中的所有非法字符是什么?,python,regex,compilation,re,illegal-characters,Python,Regex,Compilation,Re,Illegal Characters,在outlook中使用python解析电子邮件时,我们遇到了一个问题。有时电子邮件中的字符无法使用openpyxl附加到excel工作表中。它引发的错误只是IllegalCharacterError 我试图强迫它打印出被视为“非法”的实际字符 也就是说,当我在opnepyxl中的一个文件中进行一些挖掘时,我在cell.py这一行中找到了引发错误的文件 if next(ILLEGAL_CHARACTERS_RE.finditer(value), None): raise IllegalCh

在outlook中使用python解析电子邮件时,我们遇到了一个问题。有时电子邮件中的字符无法使用openpyxl附加到excel工作表中。它引发的错误只是
IllegalCharacterError

我试图强迫它打印出被视为“非法”的实际字符

也就是说,当我在opnepyxl中的一个文件中进行一些挖掘时,我在
cell.py
这一行中找到了引发错误的文件

if next(ILLEGAL_CHARACTERS_RE.finditer(value), None):
    raise IllegalCharacterError
因此,导航到定义了
非法字符的位置,我们发现:

ILLEGAL_CHARACTERS_RE = re.compile(r'[\000-\010]|[\013-\014]|[\016-\037]')
所以我试着打印(非法字符)
,希望它能打印出它所代表的值。由于我对正则表达式或compile的使用不是很熟练,我不确定会发生什么,但遗憾的是,我打印到控制台的只是
re.compile(r'[\000-\010]|[\013-\014]|[\016-\037])


有人能帮我找出如何打印这些值,或者至少了解如何找到这些值所代表的内容吗?

在正则表达式或简称Regex中,您看到的输出是给定范围内某些字符的表达式。例如:

RE的第一部分:

[\000-\010]
[\013-\014]
[\016-\037]
这意味着此集合包含0到8之间的任何字符(字符代码0到8),这些字符是控制字符。您可以从NULL(�) 到BS(退格)

RE的第二部分:

[\000-\010]
[\013-\014]
[\016-\037]
同样,这是更多的控制字符。特别是11到12的字符(字符代码11到12)。可以是VTFF。请注意VT实际上是无法打印的制表

RE的第三部分:

[\000-\010]
[\013-\014]
[\016-\037]
现在这有点有趣,因为它既包含控制字符,也包含可打印字符。因此,您可以得到14到31之间的任何字符(字符代码14到31)

因此,它无法打印任何非法字符的唯一逻辑原因是因为提供的RE不包含可打印字符。33之后的任何ASCII字符都是可打印字符(32是空格字符),但正如您在这里看到的,您的代码包含从\000到\037的所有内容。因此,您正在尝试打印无法打印的控制字符

以下是一个ASCII表格供参考:


我希望这有帮助!

实际上你可以打印它们。它们只是以正方形打印。我已经知道如何通过写入字节字符串并对其进行解码来打印它们。我认为解决方案是将我从电子邮件正文中获得的字符串转换为字节,然后替换任何“非法”的字节码根据openpyxl,有一个空格或什么的。我确实觉得很奇怪,openpyxl认为33到37是非法的。这些是可打印的,我一直在移动它们,所以我发现在正则表达式中有点奇怪。但在我周一回去工作之前无法测试。感谢详细信息和参考链接。没问题!我希望我做到了我对你的问题有些了解。这是我过去至少解码字节码并打印可以打印的东西。
x=b'\000\010\013\014\016\017\018\019\020\021\022\023\024\025\026\027\028\029\030\031\032\033\034\035\036\037'打印(x.decode())