将Python String过滤为字节为3或更小的utf8字符

时间:2018-04-25 02:12:44

标签: python-3.x utf-8 utf

我正在尝试过滤python 3字符串,以便只保留3个字节或更少字节的utf8字符(我写的是一个只需3个字节或更少的utf8_general_ci的SQL数据库)。在Python中有一种直接的方法吗?任何帮助都将非常感激。

3 个答案:

答案 0 :(得分:0)

BMP开始,在其外部进行过滤。

''.join(c for c in S if c < '\U00010000')

答案 1 :(得分:0)

Unicode代码点等于且小于0xffff被编码为3个或更少的字节(以上,它需要4个字节)。

这样:

''.join(c for c in my_string if ord(c) <= 0xffff)

我不确定Ignacio解决方案是否更快:我的函数更多(对于每个字符)(ord),但<只是整数比较。在另一个解决方案中,它应该进行字符串比较,这可能(但不确定)是复杂的。

我对Ignacio解决方案不喜欢的是在字符串上使用<。文档说“ lexicographic ”排序,但单词(英文)对单词有另一种含义。 Sso in python'&lt;'在字符串上通常是一个错误,但在这种情况下不是。我认为这是Python设计中的少数错误之一('B' < 'a',真的吗?)。我的解决方案的意图是(IMO)更清楚。

答案 2 :(得分:0)

谢谢Giacomo Catenazzi。答案是: ''。join(如果ord(c)&lt; = 0xffff,则为my_string中的c;

替代答案 ''。join([_ for my_string中的_如果len(_。encode('utf-8'))&lt; = 3]) 运行速度是''.join的一半(如果是ord(c)&lt; = 0xffff,那么c为my_string中的c。)