2012-01-26 14 views
0

私のシステム:XP + python27 コーデック、 XPのGBK、私は '\ XC4 \ XE3 \ XBA \ XC3' から "你好" を取得するにはどうすればよいのpython 27アスキーどのように私のキャラクターを取得するには?

>>> a = '你好'  
>>> a 
'\xc4\xe3\xba\xc3' 
>>> print a 
你好 
>>> '\xc4\xe3\xba\xc3'.decode('gbk') 
u'\u4f60\u597d' 
>>> '\xc4\xe3\xba\xc3'.encode('gbk') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 0: ordinal 
not in range(128) 

+0

あなたが上で展開することができます質問、言語など? – Damien

答えて

0

あなたのPythonシェルはgbkエンコードされた文字列を印刷できません。そこには印刷できません。

+0

+1。 OPはUTF-8として印刷しようとします。 –

6

あなたがunicodeにバイトをデコードしているので、これは、動作します:

'\xc4\xe3\xba\xc3'.encode('gbk') 

:あなたは(既に符号化されている)バイトをエンコードしようとしているので、

'\xc4\xe3\xba\xc3'.decode('gbk') 

これは、しませんPython 2のエラーメッセージは役に立ちませんが、Unicode文字列でのみエンコードを使用してください。

u'\u4f60\u597d'.encode('gbk') # Gets you back the bytes you had before. 

Python 2では、対話的なプロンプトでaを実行するだけで、エスケープされた文字列に非ASCII文字が表示されます(\xc3または\u4f60など)。文字を表示するには、print aを実行します。または、Python 3を使用して、Unicode文字を含む文字列を表示します。

>>> a = '\xe4\xbd\xa0\xe5\xa5\xbd' 
>>> print a 
你好 

あなたは使用する必要があります:

+0

私は你好!!を得ることができません! – user1142618

+2

@ user1142618:私はあなたがこれを読むことから始めるべきだと思います:http://www.joelonsoftware.com/articles/Unicode.html –

0

彼はエンコードし、それを印刷するときに必要

>>> a = u'\u4f60\u597d'.encode('gbk') 
>>> print a 
��� 
>>> a 
'\xc4\xe3\xba\xc3' 

として表示する。しかし場合は指定されていないことを意味し

>>> c = '\xe4\xbd\xa0\xe5\xa5\xbd'.decode('gbk') 
>>> c 
u'\u6d63\u72b2\u30bd' 
>>> c = c.encode('gbk') 
>>> print c 
你好