Nếu mục đích của bạn là để chuyển đổi một tập hợp các chuỗi tiêu chuẩn để unicode, bạn có thể lập bản đồ chức năng đó vào danh sách của bạn:
lst = ["aaa", "bbb", "ccc"]
map(unicode, lst)
Mà cho
[u"aaa", u"bbb", u"ccc"]
Nếu Tuy nhiên lst
chứa một ASCII không chuỗi ký tự, bạn sẽ phải thêm tiền tố cho chuỗi cụ thể đó với u
. Nếu không, bạn sẽ gặp phải lỗi này khi chuyển đổi:
lst = ["\xe4"]
map(unicode,lst)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)
Như đã lưu ý trong các nhận xét, câu trả lời này khác với Python 2.x hoặc 3.x. Trong Python 3, everything changes:
Mọi thứ bạn nghĩ bạn biết về dữ liệu nhị phân và Unicode đã thay đổi. Python 3.0 sử dụng các khái niệm về dữ liệu văn bản và (nhị phân) thay vì các chuỗi Unicode và các chuỗi 8 bit. Tất cả văn bản là Unicode; tuy nhiên mã hóa Unicode được biểu diễn dưới dạng dữ liệu nhị phân. Loại được sử dụng để giữ văn bản là str, loại được sử dụng để giữ dữ liệu là byte. Sự khác biệt lớn nhất với tình huống 2.x là mọi nỗ lực trộn văn bản và dữ liệu trong Python 3.0 đều làm tăng TypeError, trong khi nếu bạn trộn các chuỗi Unicode và 8 bit trong Python 2.x, nó sẽ hoạt động nếu 8-bit chuỗi xảy ra chỉ chứa các byte 7 bit (ASCII), nhưng bạn sẽ nhận được UnicodeDecodeError nếu nó chứa các giá trị không phải ASCII. Hành vi có giá trị cụ thể này đã gây ra nhiều khuôn mặt buồn trong những năm qua.
này phụ thuộc vào bạn sử dụng Python 2 hoặc Python 3. –
Tôi đang sử dụng 'Python 2.7.2 +', nhưng nếu bạn biết câu trả lời cho cả nó có thể là hữu ích cho tương lai. – xralf
Trong Python 3.x tất cả các strign là unicode theo mặc định, và bất kỳ kênh xử lý văn bản I/O (tệp, cơ sở dữ liệu, in ấn) hoặc yêu cầu một mã hóa explcit hoặc sử dụng mã hóa hệ thống rộng theo mặc định. – jsbueno