2009-06-13 35 views

答えて

28

は、Pythonは、通常の文字列として名前を見ていると仮定すると、あなたが最初にunicodeにそれをデコードする必要があります:

>>> name 
'Christensen Sk\xf6ld' 
>>> unicode(name, 'latin-1') 
u'Christensen Sk\xf6ld' 

これを達成するための別の方法:

>>> name.decode('latin-1') 
u'Christensen Sk\xf6ld' 
を次の例を参照してください。

文字列の前に "u"があることに注意してください。これを印刷する場合、アクセント付き文字が正しく表示されます。

>>> print name.decode('latin-1') 
Christensen Sköld 

ところで:必要なときに、あなたは、例えばにユニコードを有効にするデ「エンコード」メソッドを使用することができますUTF-8文字列:Unicodeを使用したバイト文字列が与えられ

>>> name.decode('latin-1').encode('utf-8') 
'Christensen Sk\xc3\xb6ld' 
+0

おかげです。だから私はそれをデータベースに保存する必要があれば、それをデコードしてデータベースに保存することができます。 – Vicky

+1

いいえ、Markの例をもう一度読んでください。 (latin1、cp1252など)からユニコードにデータをデコードした後、(1)データベースがサポートし、(2)すべてのユニコード文字を保持するエンコーディングでユニコード文字列をエンコードする必要があります。通常はUTF-8 。 –

8

私はそれが正しく動作していると思っています。デフォルトでは、すべての端末がUnicodeをサポートしているわけではないので、Pythonは文字列をASCIIエンコーディングで表示します。あなたが実際に文字列を印刷する場合、それは動作するはずです。

>>> u'\xcfa' 
u'\xcfa' 
>>> print u'\xcfa' 
Ïa 
+0

端末に問題がある場合は、データベース(MySQL)に保存すると正しく表示されますか? – Vicky

+0

はい、そうですが、DBの照合/文字セットのエンコーディングを処理する必要があります。 – securecurve

6

b"\N{SNOWMAN}"b"\N{SNOWMAN}".decode('unicode-escape)が期待されるUnicode文字列u'\u2603'が生成されますエスケープします。