2017-12-08 17 views
2

emojiをPython 3のUnicodeに変換しようとしています。たとえば、emojiがあり、これから対応するUnicode 'U + 1F600'を取得したいと思います。同様に私は 'U + 1F600'を元に戻したいと思います。今私はドキュメントを読んでいくつかのオプションを試しましたが、pythonsの動作は私をここで混乱させます。emojisをUnicodeに変換する、あるいはその逆をPython 3で変換する

>>> x = '' 
>>> y = x.encode('utf-8') 
>>> y 
b'\xf0\x9f\x98\x80' 

絵文字はバイトオブジェクトに変換されます。

>>> z = y.decode('utf-8') 
>>> z 
'' 

バイトオブジェクトを絵文字に変換しました。これまでのところよくできました。今

、絵文字のUnicodeを取っ:

>>> c = '\U0001F600' 
>>> d = c.encode('utf-8') 
>>> d 
>>> b'\xf0\x9f\x98\x80' 

これは、再びバイトエンコーディングを出力します。

>>> d.decode('utf-8') 
>>> '' 

これは、絵文字をもう一度印刷します。私は本当にユニコードと絵文字の間でのみ変換する方法を理解できません。

答えて

2

''は既にUnicodeオブジェクトです。 UTF-8はUnicodeではなく、Unicodeのバイトエンコーディングです。 Unicode文字のコードポイント番号を取得するには、ord関数を使用します。そして、あなたが望む形でそれを16進数としてフォーマットすることができます。このように:

s = '' 
print('U+{:X}'.format(ord(s))) 

出力

U+1F600 

あなたは、Python 3.6以降を持っている場合は、あなたが作ることができ、それF-文字列使用しても、短く(かつ効率的):

s = '' 
print(f'U+{ord(s):X}') 

ところで、'\U0001F600'のようなUnicodeエスケープシーケンスを作成する場合は、'unicode-escape'コーデックがあります。ただし、bytes文字列が返されます。その文字列をテキストに変換したい場合があります。 'UTF-8'コーデックを使用することもできますが、 'ASCII'コーデックを使用することもできます。これは、有効なASCIIのみを含むことが保証されているためです。

s = '' 
print(s.encode('unicode-escape')) 
print(s.encode('unicode-escape').decode('ASCII')) 

出力

b'\\U0001f600' 
\U0001f600 

は、私はあなたがスタックオーバーフローの共同創設者ジョエル・スポルスキThe Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)することによって、この短い記事を見てみましょうお勧めします。

関連する問題