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
をゴミ箱に入れようとするべきですか、それとももっと簡単でばかげていない方法がありますか?
エンコードを正しく使用しているとは思いませんし、使用する必要もありません。あなたが持っているのは、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]
'????'
混乱の最後の部分は、「ナローPythonビルド」」と呼ばれるものを実行しているという事実が原因である可能性があります。Pythonはシングルを保持できません単一の絵文字を保持するのに十分な情報を持つ文字。最善の解決策は、Python 3.に移動することです。それ以外の場合は、 TF-16サロゲートペア を処理してみてください。