2017-07-26 10 views
1

視覚的に同じように見えるので、これらの文字が異なる理由はわかりません。彼らは同じキャラクターの異なる表現ですか?または実際に異なる文字ですか?彼らの等価性を確認する方法はありますか?Trueになりますか?これらの文字はどのように異なっていますか?

>>> s = u'\u2022' 
>>> ss = '•' 
>>> s == ss 
False 
>>> print u'\u2022' , '•' 
• • 
>>> ss = unicode(ss) 
>>> ss == s 
False 
>>> repr(ss) 
"u'\\xe2\\x80\\xa2'" 
>>> repr(s) 
"u'\\u2022'" 
+1

この問題、彼らは同じ文字 'BULLET'あるS' –

+0

==' ss.decode( 'UTF-8')試してみてくださいPythonの 'unicode'型と関係があります。このような問題に直面したくない場合は、Python 3に切り替えることができます。 – ForceBru

+2

Python 3で同じことを試してみてください。なぜなら、Python 2ではなくPython 3を使用する理由が個人的な理由になります。 – poke

答えて

7

u"\u2022"(あなたs)は、箇条書きの文字を含むUnicode文字列(タイプunicode)です。

"\xe2\x80\xa2"(お客様のss)は、箇条書き文字をUTF-8としてエンコードするために使用される3バイトを含むバイト文字列(タイプstr)です。

あなたがstr.decodeunicode.decodeを使用して他の1つに変換することができます:

>>> s_encode = s.encode("UTF-8") 
>>> s_encode == ss 
True 

>>> ss_decode = ss.decode("UTF-8") 
>>> ss_decode == s 
True 
+1

これはhttp://で見ることができますwww.fileformat.info/info/unicode/char/2022/index.htmエンコード –

関連する問題