2012-08-08 10 views
11
myString = 'éíěřáé' 

この文字列をデコードしてユニコードにする必要があります。 一般的に、これら2つの方法の間には、使用法の違いがありますか?string.decode()とunicode(string)との比較

myString.decode(encoding='UTF-8', errors='ignore') 

unicode(myString, encoding='UTF-8', errors='ignore') 

答えて

9

unicodeコンストラクタは離れた文字列から他のタイプを取ることができる:バイト文字列の場合について

>>> unicode(10) 
u'10' 

が、しかし、2つの形態がほとんど同等です。いくつかのエンコードオプションは、彼らがUnicodeの出力をもたらさないようunicodeコンストラクタに対して有効ではありませんが、そのような'hex'などバイト文字列の.decode方法で有効です:Pythonの2.xのstr.decode()

>>> unicode('10', encoding='hex') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: decoder did not return an unicode object (type=str) 
0

のいずれかをもたらすことができますユニコードオブジェクトまたは別のものstrunicode()関数は、ユニコードオブジェクトになるエンコーディングに対してのみ機能します。例えば

:内部的に彼らはunicode()への呼び出しは、それは本当にだけにして、オブジェクトをデコードしなかったことを示すされたのと同じ方法で両方の仕事は結果の型に反対

>>> "x\x9cKLJ\x06\x00\x02M\x01'".decode('zip') 
'abc' 
>>> unicode("x\x9cKLJ\x06\x00\x02M\x01'", encoding='zip') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: decoder did not return an unicode object (type=str) 
>>> 

注意。

2

これらは本質的に同じですが、どちらの場合でもパフォーマンスのわずかなショートカットがあります。 str.decodeはその引数が文字列であることを知っているので、その引数のショートカット型チェックが可能ですが、unicode.__new__にはUTF-8を含むいくつかの一般的なエンコーディングのショートカットがあります。

どちらの方法も一般的にPyCodec_Decodeを呼び出します。