Nuestros mejores programadores agotaron sus reservas de café, por su búsqueda diariamente por la solución, hasta que Emiliano halló la contestación en Beanstalk y ahora la comparte contigo.
Solución:
Con el consejo sobre unicodedata.name
y un poco más de investigación me las arreglé para armar esto:
import unicodedata
from unidecode import unidecode
def deEmojify(inputString):
returnString = ""
for character in inputString:
try:
character.encode("ascii")
returnString += character
except UnicodeEncodeError:
replaced = unidecode(str(character))
if replaced != '':
returnString += replaced
else:
try:
returnString += "[" + unicodedata.name(character) + "]"
except ValueError:
returnString += "[x]"
return returnString
Básicamente, primero intenta encontrar la representación ASCII más adecuada, si eso falla, intenta usar el nombre Unicode, y si eso falla, simplemente lo reemplaza con algún marcador simple.
Por ejemplo Tomando esto string:
abcdšeđfčgžhÅiØjÆk 可爱!!!!!!!!
Y ejecutando la función:
string = u'abcdšeđfčgžhÅiØjÆk u53efu7231!!!!!!!!U0001f60dU0001f60dU0001f60dU0001f60dU0001f60dU0001f60dU0001f60dU0001f61d'
print(deEmojify(string))
Producirá el siguiente resultado:
abcdsedfcgzhAiOjAEk[x] Que Ai!!!!!!!![SMILING FACE WITH HEART-SHAPED
EYES][SMILING FACE WITH HEART-SHAPED EYES][SMILING FACE WITH
HEART-SHAPED EYES][SMILING FACE WITH HEART-SHAPED EYES][SMILING FACE
WITH HEART-SHAPED EYES][SMILING FACE WITH HEART-SHAPED EYES][SMILING
FACE WITH HEART-SHAPED EYES][FACE WITH STUCK-OUT TONGUE AND
TIGHTLY-CLOSED EYES]
Prueba esto
import unicodedata
print( unicodedata.name(u'U0001f60d'))
el resultado es
SMILING FACE WITH HEART-SHAPED EYES
Eres capaz de añadir valor a nuestro contenido informacional participando con tu experiencia en las interpretaciones.