Comment puis-je filtrer les caractères Emoji de mon entrée afin que je puisse enregistrer dans MySQL & Lt; 5.5?
J'ai un Django app qui prend tweet de données de l'API Twitter et l'enregistre dans une base de données MySQL. Autant que je sache (je suis encore à obtenir ma tête autour des points les plus fins de codage de caractères) je suis en UTF-8 partout, y compris MySQL encodage et le classement, qui fonctionne très bien, sauf quand un tweet contient Emoji personnages, dont je comprends l'utilisation de quatre octets codage. En essayant de sauver leur produit est le suivant avertissements de Django:
/home/biggleszx/.virtualenvs/myvirtualenv/lib/python2.6/site-packages/django/db/backends/mysql/base.py:86: Attention: Pas de chaîne de valeur: '\xF0\x9F\x98\xAD-je... "pour la colonne "texte" à la ligne 1
retour auto.le curseur.execute(requête, args)
Je suis de l'utilisation de MySQL 5.1, donc à l'aide d' utf8mb4 n'est pas une option, sauf si je mettre à 5.5, que je ne voudrais pas tout de suite (également à partir de ce que j'ai lu, Django appuie ce n'est pas tout à fait prêt à la production, même si cela pourrait ne plus être à jour). J'ai aussi vu les gens de conseiller l'utilisation de BLOB à la place du TEXTE sur les colonnes, je serais aussi plutôt ne pas faire ce que je me dis qu'il serait préjudiciable à la performance.
Ma question est, puis, en supposant que je ne suis pas trop gêné à environ 100% de la préservation de l'tweet contenu, est-il possible que je peux filtrer tous les caractères Emoji et de les remplacer par un non-caractères codés sur plusieurs octets, tels que le vénérable WHITE MEDIUM SMALL SQUARE (U+25FD)
? Je me figure ce est la façon la plus simple pour enregistrer des données compte tenu de ma configuration actuelle, même si, il me manque une autre solution évidente, je serais ravi de l'entendre!
Pour info, je suis en utilisant le stock Python 2.6.5 sur Ubuntu 10.04.4 LTS. sys.maxunicode
est 1114111, c'est donc un UCS-4 construire.
Merci pour la lecture.
source d'informationauteur BigglesZX | 2012-12-05
Vous devez vous connecter pour publier un commentaire.
Il s'avère donc ce qui a été répondu à quelques reprises, je n'avais simplement pas eu le droit de Google-fu pour trouver des questions existantes.
Grâce à Martijn Pietersla solution est venue du monde des expressions régulières, plus précisément, le code (basé sur sa réponse sur le premier lien ci-dessus):
Le personnage que je suis remplaçant, c'est de l'
WHITE MEDIUM SMALL SQUARE (U+25FD)
pour info, mais pourrait être n'importe quoi.Pour ceux qui ne connaissent UCS, comme moi, c'est un système de conversion Unicode et une version de Python comprend le soutien pour l'UCS-2 ou UCS-4 variante, chaque de ce qui est différent de limite supérieure sur la prise en charge des caractères.
Avec l'ajout de ce code, les cordes semblent persister dans MySQL 5.1 l'amende juste.
Espère que cela aide quelqu'un d'autre dans la même situation!
Je tryied la solution par BigglesZX et le son n'était pas woring pour l'emoji du cœur (❤) après la lecture de l' [emoji article de wikipédia][1] j'ai vu que l'expression régulière n'est pas couvrant tous les émoticônes tout en couvrant également les autres de la gamme de l'unicode qui ne sont pas les émoticônes.
Le code suivant permet de créer les 5 expressions régulières qui couvrent les 5 emoji blocs dans la norme:
Ces blocs pourraient être regroupées en trois blocs (UCS-4):
Leurs équivalents en UCS-2:
Donc, finalement, nous pouvons définir une seule expression régulière avec tous les cas:
J'ai découvert il y a un autre habitué expresion qui est en mesure d'identifier les émoticônes.
Cette regex est fourni par l'équipe de instagram-enginnering blog
Source:
http://instagram-engineering.tumblr.com/post/118304328152/emojineering-part-2-implementing-hashtag-emoji
note: j'ai ajouter une autre réponse que celle-ci est pas complemetary à ma précédente réponse ici.
je suis en utilisant json fonction de transmission qui codent pour l'entrée.
cette fonction est utilisée pour dict encodage (à convertir en chaîne de caractères) sur json.décharges. (nous avons donc besoin de faire quelques modif pour la réponse de la suppression de la '" ')
cela m'a permis d'enregistrer des emoji pour mysql, et de le présenter (web):