Pokud MySQL nedokáže zpracovat kódy UTF-8 o velikosti 4 bajtů nebo více, budete muset odfiltrovat všechny znaky Unicode přes kódový bod \U00010000
; UTF-8 kóduje kódové body pod tímto prahem na 3 bajty nebo méně.
K tomu můžete použít regulární výraz:
>>> 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: '
Případně můžete použít .translate()
funkce
s mapovací tabulkou, která obsahuje pouze None
hodnoty:
>>> nohigh = { i: None for i in xrange(0x10000, 0x110000) }
>>> example.translate(nohigh)
u'Some example text with a sleepy face: '
Vytvoření překladové tabulky však zabere hodně paměti a zabere nějaký čas, než se vytvoří; pravděpodobně to nestojí za vaši námahu, protože přístup regulárních výrazů je efektivnější.
To vše předpokládá, že používáte python zkompilovaný UCS-4. Pokud byl váš python zkompilován s podporou UCS-2, můžete použít pouze kódové body do '\U0000ffff'
v regulárních výrazech a nikdy nenarazíte na tento problém.
Podotýkám, že od MySQL 5.5.3 nově přidaný utf8mb4
kodek
podporuje celý rozsah Unicode.