2017-05-05 14 views
1

私の現在の週末プロジェクトの1つに問題があります。私は、さまざまなソースからいくつかのデータを取り出し、すべてをesc-posプリンタに送り出すPythonスクリプトを書いています。あなたは... POSプリンタは、絵文字のようなexacltyないPython - unicode emojisをASCII文字に置き換えてください。

を想像するかもしれないように、このようなテキストは:

'\u53ef\u7231!!!!!!!!\U0001f60d\U0001f60d\U0001f60d\U0001f60d\U0001f60d\U0001f60d\U0001f60d\U0001f61d' 

結果の出てくる:

可爱!!!!!!!! 

私にこの文字列を与えますプリンターはもちろん私が望むものとはかなり異なっています。だから私はこれらの非ASCII文字を別のものに置き換える必要があります。私は最初のキャラクターは本当に気にしませんが、私はemojisを気にしています。 unidecode(str(text))のようなものを使用すると、少なくともそれらは除外されますが、それらをより有用なものに変換したいと考えています。 [: - D]のような古典的なスマイルにするか、[心臓のような顔を滑らかにする]にします。

私の問題は...どうすればこのことをやりますか?最も一般的な絵文字のためのルックアップテーブルを手動で作成するのはちょっと面倒なので、私にできることが他にあるかどうか疑問に思っています。

+0

あなたはライブラリの希望や面倒な作業を行うことができます。助けるかもしれない[this](https://pypi.python.org/pypi/emoji)があります。 – user3591723

答えて

2

で試してみてください。

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 

基本的に最初の試み最も適切なアスキー表現を見つけるために、それが失敗すれば、ユニコードnそれが失敗したとしても単純なマーカーで置き換えられます。例えば

はこの文字列を取る:

abcdšeđfčgžhÅiØjÆk可爱!!!!!!!!

と機能実行:

abcdsedfcgzhAiOjAEk [X]ケ愛!!!!!!!! [心臓 - WITH笑顔:

string = u'abcdšeđfčgžhÅiØjÆk \u53ef\u7231!!!!!!!!\U0001f60d\U0001f60d\U0001f60d\U0001f60d\U0001f60d\U0001f60d\U0001f60d\U0001f61d' 
print(deEmojify(string)) 

すると、次の結果を生成します目] [心地よい目の笑顔] [心地よい顔] 心の形の目[心地よい目の笑顔] [心地よい顔の心地よい] 心の形の目[心地よい目の心地よい顔] ] [スマイル0 STUCK-OUTの舌と きつく目を閉じて、ハート型EYES WITHFACE] [顔]

1

この

import unicodedata 
print(unicodedata.name(u'\U0001f60d')) 

結果がunicodedata.nameに関するヒントと私は一緒にこの事を置くことに成功し、いくつかのさらなる研究では

SMILING FACE WITH HEART-SHAPED EYES 
関連する問題