首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从utf8中删除无效字符和非字符

从utf8中删除无效字符和非字符
EN

Stack Overflow用户
提问于 2017-11-16 00:51:18
回答 1查看 116关注 0票数 0

我正在加载一些数据,对其进行处理,然后将数据发送到一个不允许无效的utf8 noncharacterU+FDD0通过U+FDEF的应用程序,以及无效的U+FFFEU+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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-16 02:40:12

不过,我还没有充分考虑过这一问题的后果,您可以去掉那些具有unicode类别为“非字符”的字符:

代码语言:javascript
复制
>>> 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标准的未来版本中分配保留的代码点,因此删除保留的代码点似乎是有风险的。您需要考虑在您的特定情况下,以及现在和将来的应用程序中是否需要这样做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47319817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档