2012-03-30 13 views
18

Python 2.7で.lower()を使用すると、文字列がŠČŽの場合、文字列は小文字に変換されません。 辞書からデータを読みます。python 2.7小文字

str(tt["code"]).lower(),tt["code"].lower()を試しました。

提案がありますか?

+1

http://stackoverflow.com/questions/727507/how-can-i-do-unicode-uppercaseを見て、おそらく関連していると思います。 – mgilson

答えて

22

利用ユニコード文字列:

[email protected]:~$ python 
Python 2.7.2+ (default, Oct 4 2011, 20:06:09) 
[GCC 4.6.1] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> print "ŠČŽ" 
ŠČŽ 
>>> print "ŠČŽ".lower() 
ŠČŽ 
>>> print u"ŠČŽ".lower() 
ščž 

その小さなuを参照してください?つまり、strオブジェクトではなく、unicodeオブジェクトとして作成されています。

+2

しかし、それが文字通りでないなら、彼はどのようにユニコードを手に入れますか? – agf

+0

私はdictからtt ["code"]を "ŠČŽ"に変換する方法を読んでいますか? – Yebach

+0

** unicode(tt ["code"]、 'latin2')**を使用してください。ここで 'latin2'はエンコーディングされているため、別のものを使用する必要があります。 – Tupteq

4

使用ユニコード:

>>> print u'ŠČŽ'.lower().encode('utf8') 
ščž 
>>> 

あなたではなく、単にあなたが問題に気付いた時点でよりも、できるだけ早くそれは外の世界からあなたのプログラムに入るとをUnicodeにテキストを変換する必要があります。

したがって、codecsモジュールを使用して復号化されたテキストを読むか、'bytestring'.decode('latin2')を使用してください(latin2の代わりに実際のエンコーディングを使用する必要があります)。

+0

私はdictから読んでいますので、tt ["code"]を "ŠČŽ"に変換する方法は? lower()。encode( 'utf8') – Yebach

+0

@Yebachは、ustr(tt ["code"])を使用できません。更新を参照してください。 – Marcin

関連する問題