我正在加载一些数据,对其进行处理,然后将数据发送到一个不允许无效的utf8 noncharacter的U+FDD0通过U+FDEF的应用程序,以及无效的U+FFFE和U+FFFF特殊字符。
我的原始数据超出了我的控制范围,有些数据恰好包含了我想要清除的无效字符。
但是,我的python代码仍然发送应用程序无效的utf8,因为它不会忽略非字符和其他无效字符。
例如,b'\xef\xbf\xbf'.decode('utf-8', 'ignore')返回'\uffff'而不是忽略无效字符,encode具有相同的行为。
我第一次用U+FFFE调试它,它有一个与BOM相关的wontfix错误。https://bugs.python.org/issue765036
然后,我发现这个庞大的电子邮件列表线程(https://bugs.python.org/issue12729)声称,可以发出非字符,因为应用程序可能希望将它们保存在内部使用。
但是,没有这些非字符和其他无效字符(如utf8 ),有没有好的python方式可以发出'transmitabble‘U+FFFF?
发布于 2017-11-16 02:40:12
不过,我还没有充分考虑过这一问题的后果,您可以去掉那些具有unicode类别为“非字符”的字符:
>>> s = '\uffff\ufffeSome string that contains \ufdd0, \ufdd1, \ufdef and \ufdf0'
>>> print(s)
Some string that contains , , and ﷰ
>>> s = ''.join(c for c in s if unicodedata.category(c) != 'Cn')
>>> print(s)
Some string that contains , , and ﷰ有一些关于字符类别这里和这里的信息-向下滚动到“受限的交换”。
由于可能会在Unicode标准的未来版本中分配保留的代码点,因此删除保留的代码点似乎是有风险的。您需要考虑在您的特定情况下,以及现在和将来的应用程序中是否需要这样做。
https://stackoverflow.com/questions/47319817
复制相似问题