如果MySQL无法处理4字节或更多字节的UTF-8代码,那么您必须过滤掉代码点上的所有unipre字符
U00010000;
UTF-8将低于该阈值的代码点编码为3个字节或更少。
您可以为此使用正则表达式:
>>> import re>>> highpoints = re.compile(u'[U00010000-U0010ffff]')>>> example = u'Some example text with a sleepy face: U0001f62a'>>> highpoints.sub(u'', example)u'Some example text with a sleepy face: '
另外,您可以将该
.translate()函数与仅包含
None值的映射表一起使用:
>>> nohigh = { i: None for i in xrange(0x10000, 0x110000) }>>> example.translate(nohigh)u'Some example text with a sleepy face: '
但是,创建转换表将消耗大量内存,并且需要花费一些时间来生成。正则表达式方法效率更高,可能不值得您花精力。
所有这些都假定您使用的是UCS-4编译的python。如果您的python是使用UCS-2支持编译的,那么您最多只能
'U0000ffff'在正则表达式中使用代码点,而且您永远不会遇到这个问题。
我注意到从MySQL
5.5.3开始,新添加的
utf8mb4编解码器确实支持完整的Unipre范围。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)