Ако MySQL не може да обработва UTF-8 кодове от 4 байта или повече, тогава ще трябва да филтрирате всички уникод знаци през кодова точка \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 е компилиран с поддръжка на UCS-2, тогава можете да използвате само кодови точки до '\U0000ffff'
в регулярни изрази и никога няма да срещнете този проблем на първо място.
Отбелязвам, че от MySQL 5.5.3 новодобавеният utf8mb4
кодек
поддържа пълния диапазон на Unicode.