2012-08-27 25 views
8

Như tiêu đề, có một lý do không sử dụng str() để bỏ chuỗi unicode thành str ??Python sự khác biệt giữa str (u'a ') và u'a'.encode (' utf-8 ') là gì

>>> str(u'a') 
'a' 
>>> str(u'a').__class__ 
<type 'str'> 
>>> u'a'.encode('utf-8') 
'a' 
>>> u'a'.encode('utf-8').__class__ 
<type 'str'> 
>>> u'a'.encode().__class__ 
<type 'str'> 

UPDATE: cảm ơn cho câu trả lời, cũng không biết nếu tôi có thể tạo một chuỗi sử dụng ký tự đặc biệt nó sẽ tự động chuyển đổi sang utf-8

>>> a = '€' 
>>> a.__class__ 
<type 'str'> 
>>> a 
'\xe2\x82\xac' 

Cũng là một đối tượng Unicode trong python 3

Trả lời

19

Khi bạn viết str(u'a') nó chuyển đổi chuỗi Unicode đến một bytestring bằng cách sử dụng mã hóa mặc định đó (trừ khi bạn đã đi đến những rắc rối của changing it) sẽ ASCII.

Phiên bản thứ hai mã hóa rõ ràng chuỗi là UTF-8.

Sự khác biệt rõ ràng hơn nếu bạn thử với một chuỗi chứa ký tự không phải ASCII. Phiên bản thứ hai vẫn sẽ làm việc:

>>> u'€'.encode('utf-8') 
'\xc2\x80' 

Phiên bản đầu tiên sẽ đưa ra một ngoại lệ:

>>> str(u'€') 

Traceback (most recent call last): 
    File "", line 1, in 
    str(u'€') 
UnicodeEncodeError: 'ascii' codec can't encode character u'\x80' in position 0: ordinal not in range(128) 
Các vấn đề liên quan