Mam aplikację Django, która pobiera dane Tweeta z interfejsu API serwisu Twitter i zapisuje je w bazie danych MySQL. O ile wiem (wciąż mam głowę dookoła lepszych punktów kodowania znaków) używam UTF-8 wszędzie, włączając w to kodowanie i sortowanie MySQL, co działa dobrze, z wyjątkiem sytuacji, gdy tweet zawiera znaki Emoji, które Rozumiem, że używam czterobajtowego kodowania. Próbuje je zapisać produkuje następujące ostrzeżenia od Django:Jak mogę filtrować znaki Emoji z mojego wejścia, aby zapisać w MySQL <5.5?
/home/biggleszx/.virtualenvs/myvirtualenv/lib/python2.6/site-packages/django/db/backends/mysql/base.py:86 : Ostrzeżenie: Nieprawidłowa wartość ciąg: '\ xF0 \ x9F \ x98 \ XAD I ...' w kolumnie 'tekst' w wierszu 1 self.cursor.execute powrotnej (zapytania, args)
jestem przy użyciu MySQL 5.1, więc używanie utf8mb4 nie jest opcją, chyba że uaktualniam do wersji 5.5, co raczej nie chciałbym jeszcze (także z tego, co przeczytałem, wsparcie Django dla tego nie jest gotowe do produkcji, choć może to nie są już dokładne). Widziałem także folks doradzając użycie BLOB zamiast TEKSTU na zaatakowanych kolumnach, co też wolałbym nie robić, ponieważ sądzę, że może to zaszkodzić wydajności.
Moje pytanie brzmi, zakładając, że nie przejmuję się w 100% zachowywaniem zawartości tweetów, czy istnieje sposób na odfiltrowanie wszystkich znaków Emoji i zastąpienie ich postacią inną niż wielobajtowa, na przykład czcigodny WHITE MEDIUM SMALL SQUARE (U+25FD)
? Sądzę, że jest to najłatwiejszy sposób na zapisanie tych danych, biorąc pod uwagę moją obecną konfigurację, ale jeśli brakuje mi innego oczywistego rozwiązania, chciałbym to usłyszeć!
FYI, używam wersji Python 2.6.5 na Ubuntu 10.04.4 LTS. sys.maxunicode
to 1114111, więc jest to kompilacja UCS-4.
Dzięki za przeczytanie.
UTF8 może kodować nie- Znaki BMP: – SLaks
@SLaks: Tak, ale zestaw znaków MySQL 'utf8' nie może ich zapisać, ponieważ używa tylko 3 bajtów. –