Nó trả về một phiên bản được mã hóa utf-8 của chuỗi. Trong trường hợp thất bại, nó sẽ đưa ra một ngoại lệ UnicodeDecodeError
Tuy nhiên, phải mất hai tham số
- mã hóa - loại mã hóa mà một chuỗi phải được mã hóa thành
- lỗi - phản hồi khi mã hóa không thành công. Có sáu loại phản hồi lỗi
- nghiêm ngặt - phản hồi mặc định làm tăng ngoại lệ UnicodeDecodeError khi thất bại
- bỏ qua - bỏ qua unicode không thể mã hóa từ kết quả
- thay thế - thay thế unicode không thể mã hóa thành dấu chấm hỏi?
- xmlcharreplace - chèn tham chiếu ký tự XML thay vì unicode không mã hóa được
- backslashreplace - chèn một chuỗi thoát \uNNNN thay vì unicode không mã hóa được
- namereplace - chèn \N{. } chuỗi thoát thay vì unicode không thể mã hóa
ví dụ 1. Mã hóa thành mã hóa Utf-8 mặc định
# unicode string
string = 'pythön!'
# print string
print['The string is:', string]
# default encoding to utf-8
string_utf = string.encode[]
# print result
print['The encoded version is:', string_utf]
đầu ra
The string is: pythön! The encoded version is: b'pyth\xc3\xb6n!'
ví dụ 2. Mã hóa với tham số lỗi
# unicode string
string = 'pythön!'
# print string
print['The string is:', string]
# ignore error
print['The encoded version [with ignore] is:', string.encode["ascii", "ignore"]]
# replace error
print['The encoded version [with replace] is:', string.encode["ascii", "replace"]]
đầu ra
The string is: pythön! The encoded version [with ignore] is: b'pythn!' The encoded version [with replace] is: b'pyth?n!'
Ghi chú. Hãy thử các tham số lỗi và mã hóa khác nhau
mã hóa chuỗi
Kể từ Python 3. 0, các chuỗi được lưu dưới dạng Unicode, tôi. e. mỗi ký tự trong chuỗi được biểu thị bằng một điểm mã. Vì vậy, mỗi chuỗi chỉ là một chuỗi các điểm mã Unicode
Để lưu trữ hiệu quả các chuỗi này, chuỗi các điểm mã được chuyển đổi thành một tập hợp các byte. Quá trình này được gọi là mã hóa
Có nhiều mã hóa khác nhau xử lý một chuỗi khác nhau. Các mã hóa phổ biến là utf-8, ascii, v.v.
Sử dụng phương thức chuỗi encode[]
, bạn có thể chuyển đổi chuỗi unicode thành bất kỳ bảng mã nào được Python hỗ trợ. Theo mặc định, Python sử dụng mã hóa utf-8
String là một kiểu dữ liệu phổ biến trong Python và được chúng ta sử dụng hàng ngày. Trong bài viết này, những điều cơ bản về mã hóa/giải mã chuỗi sẽ được giới thiệu để có thể giải tỏa sự nhầm lẫn của bạn trong lĩnh vực này. Ở cuối bài viết, hai phương pháp để tạo các giá trị băm duy nhất từ các chuỗi có mã hóa/giải mã được giới thiệu, sẽ hữu ích cho công việc của bạn
Mã hóa ký tự cho máy tính biết cách diễn giải các số 0 và 1 thô thành các ký tự thực. Hiện tại có nhiều loại mã hóa ký tự khác nhau, nhưng những loại chúng tôi xử lý thường xuyên nhất là ASCII , mã hóa 8 bit và mã hóa dựa trên Unicode. Tiêu chuẩn Unicode cung cấp một số duy nhất cho mọi ký tự, bất kể nền tảng, thiết bị, ứng dụng hay ngôn ngữ nào
Trong Python 3, tất cả các chuỗi là chuỗi ký tự Unicode. Bạn có hai tùy chọn để tạo chuỗi Unicode trong Python. Sử dụng decode[] hoặc tạo chuỗi Unicode mới với mã hóa UTF-8 bằng unicode[]. Phương thức unicode[] là unicode[string[, encoding, errors]] , các đối số của nó phải là chuỗi 8 bit. Đối số đầu tiên được chuyển đổi thành Unicode bằng mã hóa đã chỉ định, nếu đối số mã hóa còn lại, mã hóa ASCII được sử dụng để chuyển đổi
Các chuỗi Unicode có thể được mã hóa thành các chuỗi đơn giản theo nhiều cách khác nhau, tùy theo cách mã hóa bạn chọn
# Convert Unicode to plain Python string: "encode" unicodestring = u"Hello world" utf8string = unicodestring.encode["utf-8"] asciistring = unicodestring.encode["ascii"] isostring = unicodestring.encode["ISO-8859-1"] utf16string = unicodestring.encode["utf-16"] # Convert plain Python string to Unicode: "decode" plainstring1 = unicode[utf8string, "utf-8"] plainstring2 = unicode[asciistring, "ascii"] plainstring3 = unicode[isostring, "ISO-8859-1"] plainstring4 = unicode[utf16string, "utf-16"] assert plainstring1==plainstring2==plainstring3==plainstring4
Nếu bạn thấy mình đang xử lý văn bản chứa các ký tự không phải ASCII, bạn phải tìm hiểu về Unicode—nó là gì, nó hoạt động như thế nào và Python sử dụng nó như thế nào
Unicode là một chủ đề lớn. May mắn thay, bạn không cần phải biết mọi thứ về Unicode để có thể giải quyết các vấn đề trong thế giới thực với nó. một vài kiến thức cơ bản là đủ. Trước tiên, bạn phải hiểu sự khác biệt giữa byte và ký tự. Trong các ngôn ngữ và môi trường cũ hơn, lấy ASCII làm trung tâm, byte và ký tự được coi là giống nhau. Vì một byte có thể chứa tối đa 256 giá trị nên các môi trường này bị giới hạn ở 256 ký tự. Mặt khác, Unicode có hàng chục nghìn ký tự. Điều đó có nghĩa là mỗi ký tự Unicode chiếm nhiều hơn một byte, vì vậy bạn cần phân biệt giữa ký tự và byte
Các chuỗi Python tiêu chuẩn thực sự là các chuỗi byte và một ký tự Python thực sự là một byte. Các thuật ngữ khác cho loại Python tiêu chuẩn là “chuỗi 8 bit” và “chuỗi đơn giản. ” Trong công thức này, chúng tôi sẽ gọi chúng là các chuỗi byte, để nhắc bạn về hướng byte của chúng
Ngược lại, một ký tự Unicode trong Python là một đối tượng trừu tượng đủ lớn để chứa ký tự đó, tương tự như các số nguyên dài của Python. Bạn không phải lo lắng về đại diện nội bộ; . Khi đó, bạn phải chọn cách biểu diễn các ký tự dưới dạng byte. Chuyển đổi từ Unicode sang chuỗi byte được gọi là mã hóa chuỗi. Tương tự, khi bạn tải chuỗi Unicode từ tệp, ổ cắm hoặc đối tượng hướng byte khác, bạn cần giải mã chuỗi từ byte thành ký tự
Có nhiều cách chuyển đổi đối tượng Unicode thành chuỗi byte, mỗi cách được gọi là mã hóa. Vì nhiều lý do lịch sử, chính trị và kỹ thuật, không có một mã hóa “đúng” nào. Mọi mã hóa đều có tên không phân biệt chữ hoa chữ thường và tên đó được chuyển cho phương thức giải mã dưới dạng tham số. Dưới đây là một số bạn nên biết về
Mã hóa UTF-8 có thể xử lý bất kỳ ký tự Unicode nào. Nó cũng tương thích ngược với ASCII, do đó, tệp ASCII thuần túy cũng có thể được coi là tệp UTF-8 và tệp UTF-8 chỉ sử dụng các ký tự ASCII giống hệt với tệp ASCII có cùng ký tự. Thuộc tính này làm cho UTF-8 rất tương thích ngược, đặc biệt là với các công cụ Unix cũ hơn. UTF-8 là mã hóa thống trị trên Unix. Điểm yếu chính của nó là nó khá kém hiệu quả đối với các văn bản phương Đông
Mã hóa UTF-16 được ưa chuộng bởi hệ điều hành Microsoft và môi trường Java. Nó kém hiệu quả hơn đối với các ngôn ngữ phương Tây nhưng hiệu quả hơn đối với các ngôn ngữ phương Đông. Một biến thể của UTF-16 đôi khi được gọi là UCS-2
Chuỗi mã hóa ISO-8859 là siêu tập hợp ASCII 256 ký tự. Chúng không thể hỗ trợ tất cả các ký tự Unicode; . ISO-8859-1, còn được gọi là Latin-1, bao gồm hầu hết các ngôn ngữ Tây Âu và Châu Phi, trừ tiếng Ả Rập. ISO-8859-2, còn được gọi là Latin-2, bao gồm nhiều ngôn ngữ Đông Âu như tiếng Hungary và tiếng Ba Lan
Nếu bạn muốn có thể mã hóa tất cả các ký tự Unicode, có lẽ bạn muốn sử dụng UTF-8. Bạn có thể sẽ chỉ cần xử lý các mã hóa khác khi bạn được cung cấp dữ liệu trong các mã hóa đó được tạo bởi một số ứng dụng khác