web-dev-qa-db-ja.com

Python-絵文字Unicode文字の読み取り

SQLiteデータベースからiOSテキストメッセージを読み取るPython 2.7プログラムがあります。テキストメッセージはUnicode文字列です。次のテキストメッセージでは、次のようになります。

u'that\u2019s \U0001f63b'

アポストロフィは\u2019で表されますが、絵文字は\U0001f63bで表されます。問題の絵文字のコードポイントを調べたところ、\uf63bです。 0001がどこから来ているのかわかりません。私は文字エンコードについてコミカルにほとんど知りません。

テキストを1文字ずつ印刷する場合、次を使用します。

s = u'that\u2019s \U0001f63b'

for c in s:
    print c.encode('unicode_escape')

プログラムは次の出力を生成します。

t
h
a
t
\u2019
s

\ud83d
\ude3b

Pythonでこれらの最後の文字を正しく読み取るにはどうすればよいですか?ここでエンコードを正しく使用していますか?読む前にそれらの0001をゴミ箱に入れようとするべきですか、それとももっと簡単でばかげていない方法がありますか?

9
Andrew LaPrise

エンコードを正しく使用しているとは思いませんし、使用する必要もありません。あなたが持っているのは、1つの4桁と1つの8桁のエスケープシーケンスを持つ有効なUnicode文字列です。たとえば、OSXのREPLでこれを試してください

>>> s = u'that\u2019s \U0001f63b'
>>> print s
that’s ????

ただし、python3では-

Python 3.4.3 (default, Jul  7 2015, 15:40:07) 
>>> s  = u'that\u2019s \U0001f63b'
>>> s[-1]
'????'
18
pvg

混乱の最後の部分は、「ナローPythonビルド」」と呼ばれるものを実行しているという事実が原因である可能性があります。Pythonはシングルを保持できません単一の絵文字を保持するのに十分な情報を持つ文字。最善の解決策は、Python 3.に移動することです。それ以外の場合は、 TF-16サロゲートペア を処理してみてください。

3