Hướng dẫn which encoding is used in python? - mã hóa nào được sử dụng trong python?

Mã nguồn: lib/codecs.py Lib/codecs.py


Mô -đun này xác định các lớp cơ sở cho các codec python tiêu chuẩn (bộ mã hóa và bộ giải mã) và cung cấp quyền truy cập vào Cơ quan đăng ký Codec Python nội bộ, quản lý quy trình tra cứu xử lý lỗi và xử lý lỗi. Hầu hết các codec tiêu chuẩn là mã hóa văn bản, mã hóa văn bản thành byte (và giải mã byte thành văn bản), nhưng cũng có các codec cung cấp mã hóa văn bản thành văn bản và byte cho byte. Các codec tùy chỉnh có thể mã hóa và giải mã giữa các loại tùy ý, nhưng một số tính năng mô -đun bị hạn chế được sử dụng cụ thể với mã hóa văn bản hoặc với các codec mã hóa thành bytes.text encodings, which encode text to bytes (and decode bytes to text), but there are also codecs provided that encode text to text, and bytes to bytes. Custom codecs may encode and decode between arbitrary types, but some module features are restricted to be used specifically with text encodings or with codecs that encode to bytes.

Mô -đun xác định các chức năng sau để mã hóa và giải mã với bất kỳ codec nào:

codecs.encode (obj, mã hóa = 'utf-8', lỗi = 'nghiêm ngặt') ¶encode(obj, encoding='utf-8', errors='strict')

Mã hóa OBJ bằng cách sử dụng codec đã đăng ký để mã hóa.

Lỗi có thể được đưa ra để đặt sơ đồ xử lý lỗi mong muốn. Trình xử lý lỗi mặc định là 'strict' có nghĩa là các lỗi mã hóa tăng ValueError (hoặc một lớp con cụ thể CODEC hơn, chẳng hạn như UnicodeEncodeError). Tham khảo các lớp cơ sở Codec để biết thêm thông tin về xử lý lỗi Codec.Codec Base Classes for more information on codec error handling.

codecs.decode (obj, expoding = 'utf-8', lỗi = 'nghiêm ngặt') ¶decode(obj, encoding='utf-8', errors='strict')

Giải mã OBJ bằng cách sử dụng codec đã đăng ký mã hóa.

Lỗi có thể được đưa ra để đặt sơ đồ xử lý lỗi mong muốn. Trình xử lý lỗi mặc định là 'strict' có nghĩa là việc giải mã các lỗi tăng ValueError (hoặc một lớp con cụ thể CODEC hơn, chẳng hạn như UnicodeDecodeError). Tham khảo các lớp cơ sở Codec để biết thêm thông tin về xử lý lỗi Codec.Codec Base Classes for more information on codec error handling.

Các chi tiết đầy đủ cho mỗi codec cũng có thể được tra cứu trực tiếp:

codecs.lookup (mã hóa) ¶lookup(encoding)

Nhìn lên thông tin codec trong sổ đăng ký codec Python và trả về một đối tượng CodecInfo như được định nghĩa dưới đây.

Mã hóa lần đầu tiên được tra cứu trong bộ đệm đăng ký. Nếu không tìm thấy, danh sách các chức năng tìm kiếm đã đăng ký được quét. Nếu không tìm thấy đối tượng CodecInfo, một bytes0 sẽ được nâng lên. Mặt khác, đối tượng CodecInfo được lưu trữ trong bộ đệm và trả lại cho người gọi.

ClassCodecs.CodecInfo (mã hóa, giải mã, streamreader = none, streamwriter = nonecodecs.CodecInfo(encode, decode, streamreader=None, streamwriter=None, incrementalencoder=None, incrementaldecoder=None, name=None)

Chi tiết codec khi tìm kiếm sổ đăng ký codec. Các đối số hàm tạo được lưu trữ trong các thuộc tính cùng tên:

Tên¶

Tên của mã hóa.

Encode Burddecode

Các chức năng mã hóa và giải mã không trạng thái. Đây phải là các hàm hoặc phương thức có cùng giao diện với các phương thức bytes2 và bytes3 của các phiên bản codec (xem giao diện codec). Các chức năng hoặc phương pháp dự kiến ​​sẽ hoạt động ở chế độ không trạng thái.Codec Interface). The functions or methods are expected to work in a stateless mode.

gia tăng của gia tăngincrementaldecoder

Các lớp mã hóa và bộ giải mã gia tăng hoặc các chức năng nhà máy. Chúng phải cung cấp giao diện được xác định bởi các lớp cơ sở bytes4 và bytes5, tương ứng. Codec gia tăng có thể duy trì trạng thái.

StreamWriter¶streamreader

Stream Writer và các lớp đọc hoặc chức năng nhà máy. Chúng phải cung cấp giao diện được xác định bởi các lớp cơ sở bytes6 và bytes7, tương ứng. Stream Codec có thể duy trì trạng thái.

Để đơn giản hóa quyền truy cập vào các thành phần codec khác nhau, mô -đun cung cấp các chức năng bổ sung này sử dụng bytes8 cho tra cứu codec:

codecs.getencoder (mã hóa) ¶getencoder(encoding)

Tra cứu codec cho mã hóa đã cho và trả về chức năng mã hóa của nó.

Tăng bytes0 trong trường hợp mã hóa không thể được tìm thấy.

codecs.getdecoder (mã hóa) ¶getdecoder(encoding)

Tra cứu codec cho mã hóa đã cho và trả về chức năng giải mã của nó.

Tăng bytes0 trong trường hợp mã hóa không thể được tìm thấy.

codecs.getdecoder (mã hóa) ¶getincrementalencoder(encoding)

Tra cứu codec cho mã hóa đã cho và trả về chức năng giải mã của nó.

codecs.getincrementalencoder (mã hóa) ¶

Tra cứu codec cho mã hóa đã cho và trả về lớp mã hóa gia tăng hoặc chức năng nhà máy.getincrementaldecoder(encoding)

Tăng một bytes0 trong trường hợp mã hóa không thể được tìm thấy hoặc codec không hỗ trợ bộ mã hóa gia tăng.

codecs.getIncrementAdcoder (mã hóa) ¶

Tra cứu codec cho mã hóa đã cho và trả về lớp giải mã hoặc chức năng nhà máy gia tăng của nó.getreader(encoding)

Tăng bytes0 trong trường hợp mã hóa không thể được tìm thấy hoặc codec không hỗ trợ bộ giải mã gia tăng.

Tăng bytes0 trong trường hợp mã hóa không thể được tìm thấy.

codecs.getdecoder (mã hóa) ¶getwriter(encoding)

Tra cứu codec cho mã hóa đã cho và trả về chức năng giải mã của nó.

Tăng bytes0 trong trường hợp mã hóa không thể được tìm thấy.

codecs.getdecoder (mã hóa) ¶

Tra cứu codec cho mã hóa đã cho và trả về chức năng giải mã của nó.register(search_function)

codecs.getincrementalencoder (mã hóa) ¶

Đã thay đổi trong phiên bản 3.9: Hyphens và không gian được chuyển đổi thành dấu gạch dưới.Hyphens and spaces are converted to underscore.

codecs.unregister (search_function) ¶unregister(search_function)

UNBISTER một chức năng tìm kiếm codec và xóa bộ đệm đăng ký. Nếu chức năng tìm kiếm không được đăng ký, không làm gì cả.

Mới trong phiên bản 3.10.

Mặc dù mô -đun 'strict'9 và mô -đun ValueError0 được liên kết là cách tiếp cận được khuyến nghị để làm việc với các tệp văn bản được mã hóa, mô -đun này cung cấp các chức năng và lớp tiện ích bổ sung cho phép sử dụng phạm vi codec rộng hơn khi làm việc với các tệp nhị phân:

codecs.open (tên tệp, mode = 'r', mã hóa = không, lỗi = 'nghiêm ngặt', buffering = -1) ¶open(filename, mode='r', encoding=None, errors='strict', buffering=- 1)

Mở một tệp được mã hóa bằng chế độ đã cho và trả về một thể hiện là ValueError1, cung cấp mã hóa/giải mã trong suốt. Chế độ tệp mặc định là ValueError2, có nghĩa là mở tệp ở chế độ đọc.

Ghi chú

Nếu mã hóa không phải là 'strict'8, thì các tệp được mã hóa cơ bản luôn được mở ở chế độ nhị phân. Không có sự chuyển đổi tự động của ValueError4 được thực hiện khi đọc và viết. Đối số chế độ có thể là bất kỳ chế độ nhị phân nào được chấp nhận cho hàm 'strict'9 tích hợp; ValueError6 được tự động thêm vào.

Mã hóa chỉ định mã hóa sẽ được sử dụng cho tệp. Bất kỳ mã hóa nào mã hóa và giải mã từ byte đều được cho phép và các loại dữ liệu được hỗ trợ bởi các phương thức tệp phụ thuộc vào codec được sử dụng.

Lỗi có thể được đưa ra để xác định xử lý lỗi. Nó mặc định là 'strict' khiến ValueError được nêu ra trong trường hợp xảy ra lỗi mã hóa.

Bộ đệm có cùng ý nghĩa như đối với hàm 'strict'9 tích hợp. Nó mặc định là -1 có nghĩa là kích thước bộ đệm mặc định sẽ được sử dụng.

Đã thay đổi trong phiên bản 3.11: Chế độ UnicodeEncodeError0 đã bị xóa.The UnicodeEncodeError0 mode has been removed.

codecs.encodedfile (file, data_encoding, file_encoding = none, error = 'nghiêm ngặt') ¶EncodedFile(file, data_encoding, file_encoding=None, errors='strict')

Trả về một thể hiện UnicodeEncodeError1, một phiên bản được bọc của tệp cung cấp mã hóa trong suốt. Tệp gốc được đóng khi phiên bản gói được đóng.

Dữ liệu được ghi vào tệp được bọc được giải mã theo Data_encoding đã cho và sau đó được ghi vào tệp gốc dưới dạng byte bằng File_encoding. Các byte được đọc từ tệp gốc được giải mã theo File_encoding và kết quả được mã hóa bằng Data_encoding.

Nếu File_encoding không được đưa ra, nó mặc định là Data_encoding.

Lỗi có thể được đưa ra để xác định xử lý lỗi. Nó mặc định là 'strict', khiến ValueError được nêu ra trong trường hợp xảy ra lỗi mã hóa.

codecs.iterencode (iterator, mã hóa, lỗi = 'nghiêm ngặt', ** kwargs) ¶iterencode(iterator, encoding, errors='strict', **kwargs)

Sử dụng bộ mã hóa gia tăng để lặp lại mã hóa đầu vào được cung cấp bởi iterator. Hàm này là một trình tạo. Đối số lỗi (cũng như bất kỳ đối số từ khóa nào khác) được truyền qua bộ mã hóa gia tăng.generator. The errors argument (as well as any other keyword argument) is passed through to the incremental encoder.

Hàm này yêu cầu codec chấp nhận các đối tượng UnicodeEncodeError4 để mã hóa. Do đó, nó không hỗ trợ các bộ mã hóa byte-to-byte như UnicodeEncodeError5.

codecs.iterdecode (iterator, mã hóa, lỗi = 'nghiêm ngặt', ** kwargs) ¶iterdecode(iterator, encoding, errors='strict', **kwargs)

Sử dụng bộ giải mã gia tăng để giải mã lặp lại đầu vào được cung cấp bởi iterator. Hàm này là một trình tạo. Đối số lỗi (cũng như bất kỳ đối số từ khóa nào khác) được chuyển qua trình giải mã gia tăng.generator. The errors argument (as well as any other keyword argument) is passed through to the incremental decoder.

Hàm này yêu cầu codec chấp nhận các đối tượng bytes để giải mã. Do đó, nó không hỗ trợ các bộ mã hóa văn bản với văn bản như UnicodeEncodeError7, mặc dù UnicodeEncodeError7 có thể được sử dụng tương đương với UnicodeEncodeError9.

Mô -đun cũng cung cấp các hằng số sau đây hữu ích cho việc đọc và ghi vào các tệp phụ thuộc vào nền tảng:

codecs.bom¶ Codecs.bom_be¶ Codecs.bom_le¶ Codecs.bom_utf8¶ Codecs.bom_utf16¶ Codecs.bom_utf16_be¶ Codecs.bom_utf16_LEC.BOMcodecs.BOM_BEcodecs.BOM_LEcodecs.BOM_UTF8codecs.BOM_UTF16codecs.BOM_UTF16_BEcodecs.BOM_UTF16_LEcodecs.BOM_UTF32codecs.BOM_UTF32_BEcodecs.BOM_UTF32_LE

Các hằng số này xác định các chuỗi byte khác nhau, là dấu lệnh unicode byte (BOM) cho một số mã hóa. Chúng được sử dụng trong các luồng dữ liệu UTF-16 và UTF-32 để chỉ ra thứ tự byte được sử dụng và trong UTF-8 dưới dạng chữ ký Unicode. 'strict'0 là 'strict'1 hoặc 'strict'2 Tùy thuộc vào thứ tự byte gốc của nền tảng, 'strict'3 là bí danh đối với 'strict'0, 'strict'5 cho 'strict'2 và 'strict'7 cho 'strict'1. Những người khác đại diện cho BOM trong mã hóa UTF-8 và UTF-32.

Các lớp cơ sở Codec

Mô -đun 'strict'9 xác định một tập hợp các lớp cơ sở xác định các giao diện để làm việc với các đối tượng codec và cũng có thể được sử dụng làm cơ sở để triển khai CODEC tùy chỉnh.

Mỗi codec phải xác định bốn giao diện để làm cho nó có thể sử dụng được là codec trong python: bộ mã hóa không trạng thái, bộ giải mã không trạng thái, trình đọc luồng và người viết luồng. Trình đọc luồng và nhà văn thường sử dụng lại bộ mã hóa/bộ giải mã không trạng thái để thực hiện các giao thức tệp. Các tác giả Codec cũng cần xác định cách thức codec sẽ xử lý các lỗi mã hóa và giải mã.

Người xử lý lỗi

Để đơn giản hóa và chuẩn hóa xử lý lỗi, CODEC có thể thực hiện các sơ đồ xử lý lỗi khác nhau bằng cách chấp nhận đối số chuỗi lỗi:

>>> 'German ß, ♬'.encode(encoding='ascii', errors='backslashreplace')
b'German \\xdf, \\u266c'
>>> 'German ß, ♬'.encode(encoding='ascii', errors='xmlcharrefreplace')
b'German ß, ♬'

Các trình xử lý lỗi sau đây có thể được sử dụng với tất cả các mã hóa mã hóa tiêu chuẩn Python:Standard Encodings codecs:

Giá trị

Nghĩa

'strict'

Tăng ValueError1 (hoặc một lớp con), đây là mặc định. Được thực hiện trong ValueError2.

ValueError3

Bỏ qua dữ liệu dị dạng và tiếp tục mà không cần thông báo thêm. Được thực hiện trong ValueError4.

ValueError5

Thay thế bằng một điểm đánh dấu thay thế. Khi mã hóa, sử dụng ValueError6 (ký tự ASCII). Khi giải mã, sử dụng ValueError7 (U+FFFD, ký tự thay thế chính thức). Được thực hiện trong ValueError8.

ValueError9

Thay thế bằng trình tự thoát hiểm. Khi mã hóa, hãy sử dụng hình thức thập lục phân của điểm mã Unicode với các định dạng UnicodeDecodeError0 UnicodeDecodeError1 UnicodeDecodeError2. Khi giải mã, sử dụng dạng thập lục phân của giá trị byte với định dạng UnicodeDecodeError0. Được thực hiện trong UnicodeDecodeError4.

UnicodeDecodeError5

Khi giải mã, thay thế byte bằng mã thay thế riêng lẻ từ UnicodeDecodeError6 đến UnicodeDecodeError7. Mã này sau đó sẽ được biến trở lại thành cùng một byte khi trình xử lý lỗi UnicodeDecodeError5 được sử dụng khi mã hóa dữ liệu. (Xem PEP 383 để biết thêm.)PEP 383 for more.)

Trình xử lý lỗi sau chỉ áp dụng cho mã hóa (trong mã hóa văn bản):text encodings):

Giá trị

Nghĩa

UnicodeDecodeError9

Tăng ValueError1 (hoặc một lớp con), đây là mặc định. Được thực hiện trong ValueError2.

CodecInfo2

Bỏ qua dữ liệu dị dạng và tiếp tục mà không cần thông báo thêm. Được thực hiện trong ValueError4.

Thay thế bằng một điểm đánh dấu thay thế. Khi mã hóa, sử dụng ValueError6 (ký tự ASCII). Khi giải mã, sử dụng ValueError7 (U+FFFD, ký tự thay thế chính thức). Được thực hiện trong ValueError8.

Giá trị

Nghĩa

Nghĩa

CodecInfo5

Tăng ValueError1 (hoặc một lớp con), đây là mặc định. Được thực hiện trong ValueError2.

Bỏ qua dữ liệu dị dạng và tiếp tục mà không cần thông báo thêm. Được thực hiện trong ValueError4.

Thay thế bằng một điểm đánh dấu thay thế. Khi mã hóa, sử dụng ValueError6 (ký tự ASCII). Khi giải mã, sử dụng ValueError7 (U+FFFD, ký tự thay thế chính thức). Được thực hiện trong ValueError8.The UnicodeDecodeError5 and CodecInfo5 error handlers.

Thay thế bằng trình tự thoát hiểm. Khi mã hóa, hãy sử dụng hình thức thập lục phân của điểm mã Unicode với các định dạng UnicodeDecodeError0 UnicodeDecodeError1 UnicodeDecodeError2. Khi giải mã, sử dụng dạng thập lục phân của giá trị byte với định dạng UnicodeDecodeError0. Được thực hiện trong UnicodeDecodeError4.The CodecInfo5 error handler now works with utf-16* and utf-32* codecs.

Khi giải mã, thay thế byte bằng mã thay thế riêng lẻ từ UnicodeDecodeError6 đến UnicodeDecodeError7. Mã này sau đó sẽ được biến trở lại thành cùng một byte khi trình xử lý lỗi UnicodeDecodeError5 được sử dụng khi mã hóa dữ liệu. (Xem PEP 383 để biết thêm.)The CodecInfo2 error handler.

Trình xử lý lỗi sau chỉ áp dụng cho mã hóa (trong mã hóa văn bản):The ValueError9 error handler now works with decoding and translating.

Thay thế bằng tham chiếu ký tự số XML/HTML, đây là một dạng thập phân của điểm mã Unicode với định dạng CodecInfo0 được triển khai trong CodecInfo1.

Thay thế bằng các chuỗi thoát CodecInfo3, những gì xuất hiện trong niềng răng là thuộc tính tên từ cơ sở dữ liệu ký tự Unicode. Được thực hiện trong CodecInfo4.register_error(name, error_handler)

Ngoài ra, trình xử lý lỗi sau đây dành riêng cho các codec đã cho:

Codec

UTF-8, UTF-16, UTF-32, UTF-16-BE, UTF-16-LE, UTF-32-BE, UTF-32-LE

Cho phép mã hóa và giải mã điểm mã thay thế (CodecInfo6 - CodecInfo7) làm điểm mã bình thường. Mặt khác, các codec này coi sự hiện diện của điểm mã thay thế trong UnicodeEncodeError4 là một lỗi.

Mới trong phiên bản 3.1: Trình xử lý lỗi UnicodeDecodeError5 và CodecInfo5.lookup_error(name)

Đã thay đổi trong phiên bản 3.4: Trình xử lý lỗi CodecInfo5 hiện hoạt động với các codec UTF-16* và UTF-32*.

Mới trong phiên bản 3.5: Trình xử lý lỗi CodecInfo2.

Đã thay đổi trong phiên bản 3.5: Trình xử lý lỗi ValueError9 hiện hoạt động với việc giải mã và dịch.

Tập hợp các giá trị được phép có thể được mở rộng bằng cách đăng ký một trình xử lý lỗi được đặt tên mới:strict_errors(exception)

codecs.register_error (tên, error_handler) ¶

Đăng ký hàm xử lý lỗi ERROR_Handler dưới tên. Đối số Error_Handler sẽ được gọi trong quá trình mã hóa và giải mã trong trường hợp lỗi, khi tên được chỉ định là tham số lỗi.

Để mã hóa, Error_Handler sẽ được gọi với một thể hiện UnicodeEncodeError, chứa thông tin về vị trí của lỗi. Trình xử lý lỗi phải nâng cao ngoại lệ này hoặc một ngoại lệ khác, hoặc trả lại một bộ xử lý bằng một sự thay thế cho phần không thể kiểm chứng của đầu vào và một vị trí mà mã hóa nên tiếp tục. Sự thay thế có thể là UnicodeEncodeError4 hoặc bytes. Nếu thay thế là byte, bộ mã hóa sẽ chỉ cần sao chép chúng vào bộ đệm đầu ra. Nếu thay thế là một chuỗi, bộ mã hóa sẽ mã hóa thay thế. Mã hóa tiếp tục trên đầu vào gốc tại vị trí được chỉ định. Các giá trị vị trí âm sẽ được coi là liên quan đến phần cuối của chuỗi đầu vào. Nếu vị trí kết quả nằm ngoài giới hạn CodecInfo7 sẽ được nâng lên.ignore_errors(exception)

Giải mã và dịch hoạt động tương tự, ngoại trừ UnicodeDecodeError hoặc CodecInfo9 sẽ được chuyển cho trình xử lý và việc thay thế từ trình xử lý lỗi sẽ được đưa vào đầu ra trực tiếp.

Trình xử lý lỗi đã đăng ký trước đó (bao gồm cả trình xử lý lỗi tiêu chuẩn) có thể được tra cứu theo tên:

codecs.lookup_error (tên) ¶replace_errors(exception)

Trả về trình xử lý lỗi đã được đăng ký trước đó dưới tên.

Tăng bytes0 trong trường hợp người xử lý không thể tìm thấy.

Các trình xử lý lỗi tiêu chuẩn sau đây cũng được cung cấp dưới dạng chức năng cấp mô -đun:backslashreplace_errors(exception)

codecs.strict_errors (ngoại lệ) ¶

Thực hiện xử lý lỗi 'strict'.

Thay đổi trong phiên bản 3.5: Hoạt động với giải mã và dịch.Works with decoding and translating.

codecs.xmlcharrefreplace_errors (ngoại lệ) ¶xmlcharrefreplace_errors(exception)

Thực hiện xử lý lỗi UnicodeDecodeError9 (chỉ mã hóa trong mã hóa văn bản).text encoding only).

Ký tự không thể kiểm soát được thay thế bằng tham chiếu ký tự số XML/HTML thích hợp, đây là một dạng thập phân của điểm mã Unicode với định dạng CodecInfo0.

codecs.namerplace_errors (ngoại lệ) ¶namereplace_errors(exception)

Thực hiện xử lý lỗi CodecInfo2 (chỉ mã hóa trong mã hóa văn bản).text encoding only).

Các ký tự không thể kiểm soát được thay thế bằng chuỗi thoát CodecInfo3. Tập hợp các ký tự xuất hiện trong niềng răng là thuộc tính tên từ cơ sở dữ liệu ký tự Unicode. Ví dụ, chữ thường của Đức bytes16 sẽ được chuyển đổi thành chuỗi byte bytes17.

Mới trong phiên bản 3.5.

Mã hóa không trạng thái và giải mã

Lớp cơ sở bytes18 xác định các phương thức này cũng xác định các giao diện chức năng của bộ mã hóa và bộ giải mã không trạng thái:

Codec.encode (đầu vào, lỗi = 'nghiêm ngặt') ¶encode(input, errors='strict')

Mã hóa đầu vào đối tượng và trả về một tuple (đối tượng đầu ra, độ dài tiêu thụ). Chẳng hạn, mã hóa văn bản chuyển đổi một đối tượng chuỗi thành đối tượng byte bằng cách sử dụng mã hóa bộ ký tự cụ thể (ví dụ: bytes19 hoặc bytes20).text encoding converts a string object to a bytes object using a particular character set encoding (e.g., bytes19 or bytes20).

Đối số lỗi xác định xử lý lỗi để áp dụng. Nó mặc định để xử lý 'strict'.

Phương pháp có thể không lưu trữ trạng thái trong trường hợp bytes18. Sử dụng bytes6 cho các codec phải giữ trạng thái để làm cho mã hóa hiệu quả.

Bộ mã hóa phải có khả năng xử lý đầu vào không có độ dài và trả về một đối tượng trống của loại đối tượng đầu ra trong tình huống này.

Codec.decode (đầu vào, lỗi = 'nghiêm ngặt') ¶decode(input, errors='strict')

Giải mã đầu vào đối tượng và trả về một tuple (đối tượng đầu ra, độ dài tiêu thụ). Chẳng hạn, đối với mã hóa văn bản, việc giải mã chuyển đổi một đối tượng byte được mã hóa bằng một bộ ký tự cụ thể mã hóa thành một đối tượng chuỗi.text encoding, decoding converts a bytes object encoded using a particular character set encoding to a string object.

Đối với mã hóa văn bản và các codec byte-to-byte, đầu vào phải là đối tượng byte hoặc một đối tượng cung cấp giao diện bộ đệm chỉ đọc-ví dụ: các đối tượng bộ đệm và các tệp được ánh xạ bộ nhớ.

Đối số lỗi xác định xử lý lỗi để áp dụng. Nó mặc định để xử lý 'strict'.

Phương pháp có thể không lưu trữ trạng thái trong trường hợp bytes18. Sử dụng bytes6 cho các codec phải giữ trạng thái để làm cho mã hóa hiệu quả.

Bộ mã hóa phải có khả năng xử lý đầu vào không có độ dài và trả về một đối tượng trống của loại đối tượng đầu ra trong tình huống này.

Codec.decode (đầu vào, lỗi = 'nghiêm ngặt') ¶

Giải mã đầu vào đối tượng và trả về một tuple (đối tượng đầu ra, độ dài tiêu thụ). Chẳng hạn, đối với mã hóa văn bản, việc giải mã chuyển đổi một đối tượng byte được mã hóa bằng một bộ ký tự cụ thể mã hóa thành một đối tượng chuỗi.

Đối với mã hóa văn bản và các codec byte-to-byte, đầu vào phải là đối tượng byte hoặc một đối tượng cung cấp giao diện bộ đệm chỉ đọc-ví dụ: các đối tượng bộ đệm và các tệp được ánh xạ bộ nhớ.

Phương pháp có thể không lưu trữ trạng thái trong trường hợp bytes18. Sử dụng bytes7 cho các codec phải giữ trạng thái để làm cho việc giải mã hiệu quả.

Bộ giải mã phải có khả năng xử lý đầu vào có độ dài bằng không và trả về một đối tượng trống của loại đối tượng đầu ra trong tình huống này.

Mã hóa gia tăng và giải mã codecs.IncrementalEncoder(errors='strict')

Các lớp bytes4 và bytes5 cung cấp giao diện cơ bản để mã hóa và giải mã gia tăng. Mã hóa/giải mã đầu vào được thực hiện với một cuộc gọi đến hàm mã hóa/bộ giải mã không trạng thái, nhưng với nhiều cuộc gọi đến phương thức ____ 12/________ 13 của bộ mã hóa/bộ giải mã gia tăng. Bộ mã hóa/bộ giải mã gia tăng theo dõi quá trình mã hóa/giải mã trong các cuộc gọi phương thức.

Đầu ra đã tham gia của các cuộc gọi đến phương thức ________ 12/________ 13 giống như khi tất cả các đầu vào duy nhất được nối thành một và đầu vào này được mã hóa/giải mã với bộ mã hóa/bộ giải mã không trạng thái.

Đối tượng gia tăngError Handlers for possible values.

Lớp bytes4 được sử dụng để mã hóa đầu vào trong nhiều bước. Nó xác định các phương thức sau mà mọi bộ mã hóa gia tăng phải xác định để tương thích với sổ đăng ký codec Python.

classcodecs.incrementalencoder (lỗi = 'nghiêm ngặt') ¶(object, final=False)

Hàm tạo cho một ví dụ bytes4.

Tất cả các bộ mã hóa gia tăng phải cung cấp giao diện hàm tạo này. Chúng được tự do thêm các đối số từ khóa bổ sung, nhưng chỉ những đối số được xác định ở đây được sử dụng bởi Cơ quan đăng ký codec Python.()

bytes4 có thể thực hiện các sơ đồ xử lý lỗi khác nhau bằng cách cung cấp đối số từ khóa lỗi. Xem trình xử lý lỗi cho các giá trị có thể.

Đối số lỗi sẽ được gán cho một thuộc tính cùng tên. Việc gán cho thuộc tính này cho phép chuyển đổi giữa các chiến lược xử lý lỗi khác nhau trong suốt vòng đời của đối tượng bytes4.()

Encode (đối tượng, cuối cùng = false) ¶

setstate (tiểu bang) ¶(state)

Đặt trạng thái của bộ mã hóa thành trạng thái. Trạng thái phải là trạng thái mã hóa được trả về bởi bytes40.

Gia tăng đối tượng

Lớp bytes5 được sử dụng để giải mã đầu vào trong nhiều bước. Nó xác định các phương thức sau mà mọi bộ giải mã gia tăng phải xác định để tương thích với sổ đăng ký codec Python.

classcodecs.incrementaldecoder (lỗi = 'nghiêm ngặt') ¶codecs.IncrementalDecoder(errors='strict')

Hàm tạo cho một ví dụ bytes5.

Tất cả các bộ giải mã gia tăng phải cung cấp giao diện hàm tạo này. Chúng được tự do thêm các đối số từ khóa bổ sung, nhưng chỉ những đối số được xác định ở đây được sử dụng bởi Cơ quan đăng ký codec Python.

bytes5 có thể thực hiện các sơ đồ xử lý lỗi khác nhau bằng cách cung cấp đối số từ khóa lỗi. Xem trình xử lý lỗi cho các giá trị có thể.Error Handlers for possible values.

Đối số lỗi sẽ được gán cho một thuộc tính cùng tên. Việc gán cho thuộc tính này cho phép chuyển đổi giữa các chiến lược xử lý lỗi khác nhau trong suốt vòng đời của đối tượng bytes5.

Decode (đối tượng, cuối cùng = false) ¶(object, final=False)

Đối tượng giải mã (đưa trạng thái hiện tại của bộ giải mã vào tài khoản) và trả về đối tượng được giải mã kết quả. Nếu đây là cuộc gọi cuối cùng đến cuối cùng bytes3 phải đúng (mặc định là sai). Nếu cuối cùng là đúng, bộ giải mã phải giải mã hoàn toàn đầu vào và phải xóa tất cả các bộ đệm. Nếu điều này không thể có (ví dụ: do các chuỗi byte không đầy đủ ở cuối đầu vào), nó phải bắt đầu xử lý lỗi giống như trong trường hợp không trạng thái (có thể tăng một ngoại lệ).

cài lại()¶()

Đặt lại bộ giải mã về trạng thái ban đầu.

getstate () ¶()

Trả về trạng thái hiện tại của bộ giải mã. Đây phải là một tuple với hai mục, đầu tiên phải là bộ đệm chứa đầu vào vẫn chưa được giải quyết. Thứ hai phải là một số nguyên và có thể là thông tin trạng thái bổ sung. . Cho ăn đầu vào được đệm trước đó cho bộ giải mã trả nó về trạng thái trước mà không tạo ra bất kỳ đầu ra nào. .

setstate (tiểu bang) ¶(state)

Đặt trạng thái của bộ giải mã thành trạng thái. Nhà nước phải là trạng thái giải mã được trả lại bởi bytes40.

Mã hóa luồng và giải mã

Các lớp bytes6 và bytes7 cung cấp các giao diện làm việc chung có thể được sử dụng để triển khai các mô hình phụ mã hóa mới rất dễ dàng. Xem bytes52 để biết ví dụ về cách thực hiện điều này.

Streamwriter Objects¶

Lớp bytes6 là một lớp con của bytes18 và xác định các phương thức sau mà mọi người viết luồng phải xác định để tương thích với sổ đăng ký codec Python.

classCodecs.streamWriter (stream, error = 'nghiêm ngặt') ¶codecs.StreamWriter(stream, errors='strict')

Hàm tạo cho một ví dụ bytes6.

Tất cả các nhà văn luồng phải cung cấp giao diện cấu trúc này. Chúng được tự do thêm các đối số từ khóa bổ sung, nhưng chỉ những đối số được xác định ở đây được sử dụng bởi Cơ quan đăng ký codec Python.

Đối số luồng phải là một đối tượng giống như tệp mở để viết văn bản hoặc dữ liệu nhị phân, khi phù hợp với codec cụ thể.

bytes6 có thể thực hiện các sơ đồ xử lý lỗi khác nhau bằng cách cung cấp đối số từ khóa lỗi. Xem trình xử lý lỗi cho trình xử lý lỗi tiêu chuẩn mà codec luồng cơ bản có thể hỗ trợ.Error Handlers for the standard error handlers the underlying stream codec may support.

Đối số lỗi sẽ được gán cho một thuộc tính cùng tên. Việc gán cho thuộc tính này cho phép chuyển đổi giữa các chiến lược xử lý lỗi khác nhau trong suốt vòng đời của đối tượng bytes6.

viết (đối tượng) ¶(object)

Viết các nội dung đối tượng được mã hóa vào luồng.

WriteLines (Danh sách) ¶(list)

Viết các chuỗi có thể lặp lại của các chuỗi vào luồng (có thể bằng cách sử dụng lại phương thức bytes58). Vòng lặp vô hạn hoặc rất lớn không được hỗ trợ. Các codec byte-to-bytes tiêu chuẩn không hỗ trợ phương pháp này.

cài lại()¶()

Đặt lại bộ giải mã về trạng thái ban đầu.

getstate () ¶

Trả về trạng thái hiện tại của bộ giải mã. Đây phải là một tuple với hai mục, đầu tiên phải là bộ đệm chứa đầu vào vẫn chưa được giải quyết. Thứ hai phải là một số nguyên và có thể là thông tin trạng thái bổ sung. . Cho ăn đầu vào được đệm trước đó cho bộ giải mã trả nó về trạng thái trước mà không tạo ra bất kỳ đầu ra nào. .

Đặt trạng thái của bộ giải mã thành trạng thái. Nhà nước phải là trạng thái giải mã được trả lại bởi bytes40.

Mã hóa luồng và giải mã

ClassCodecs.StreamReader (Stream, Error = 'Strict') ¶codecs.StreamReader(stream, errors='strict')

Hàm tạo cho một ví dụ bytes7.

Tất cả các đầu đọc luồng phải cung cấp giao diện cấu trúc này. Chúng được tự do thêm các đối số từ khóa bổ sung, nhưng chỉ những đối số được xác định ở đây được sử dụng bởi Cơ quan đăng ký codec Python.

Đối số luồng phải là một đối tượng giống như tệp mở để đọc văn bản hoặc dữ liệu nhị phân, khi phù hợp với codec cụ thể.

bytes7 có thể thực hiện các sơ đồ xử lý lỗi khác nhau bằng cách cung cấp đối số từ khóa lỗi. Xem trình xử lý lỗi cho trình xử lý lỗi tiêu chuẩn mà codec luồng cơ bản có thể hỗ trợ.Error Handlers for the standard error handlers the underlying stream codec may support.

Đối số lỗi sẽ được gán cho một thuộc tính cùng tên. Việc gán cho thuộc tính này cho phép chuyển đổi giữa các chiến lược xử lý lỗi khác nhau trong suốt vòng đời của đối tượng bytes7.

Tập hợp các giá trị được phép cho đối số lỗi có thể được mở rộng với bytes65.

Đọc (size = -1, chars = -1, firstline = false)(size=- 1, chars=- 1, firstline=False)

Giải mã dữ liệu từ luồng và trả về đối tượng kết quả.

Đối số chars cho biết số lượng điểm hoặc byte được giải mã để trả về. Phương thức bytes66 sẽ không bao giờ trả về nhiều dữ liệu hơn yêu cầu, nhưng nó có thể trả về ít hơn, nếu không có đủ.

Đối số kích thước cho biết số lượng byte được mã hóa tối đa gần đúng hoặc các điểm mã cần đọc để giải mã. Bộ giải mã có thể sửa đổi cài đặt này khi thích hợp. Giá trị mặc định -1 chỉ ra để đọc và giải mã càng nhiều càng tốt. Tham số này nhằm ngăn chặn phải giải mã các tệp khổng lồ trong một bước.

Cờ FirstLine chỉ ra rằng nó sẽ đủ để chỉ trả về dòng đầu tiên, nếu có lỗi giải mã trên các dòng sau.

Phương pháp nên sử dụng chiến lược đọc tham lam có nghĩa là nó nên đọc càng nhiều dữ liệu được phép trong định nghĩa của mã hóa và kích thước đã cho, ví dụ: Nếu các kết thúc mã hóa tùy chọn hoặc các điểm đánh dấu trạng thái có sẵn trên luồng, chúng cũng nên được đọc.

Readline (size = none, keepends = true) ¶(size=None, keepends=True)

Đọc một dòng từ luồng đầu vào và trả về dữ liệu được giải mã.

Kích thước, nếu được đưa ra, được truyền dưới dạng đối số kích thước cho phương thức luồng bytes66.

Nếu Keepends là kết thúc dòng sai sẽ bị tước khỏi các dòng được trả về.

Đoạn đọc (sizehint = none, keepends = true) ¶(sizehint=None, keepends=True)

Đọc tất cả các dòng có sẵn trên luồng đầu vào và trả về chúng dưới dạng danh sách các dòng.

Kết thúc dòng được triển khai bằng phương pháp codec từ bytes3 và được bao gồm trong các mục danh sách nếu Keepends là đúng.

sizehint, nếu được đưa ra, được truyền dưới dạng đối số kích thước cho phương thức luồng ____ ____166.

cài lại()¶()

Đặt lại các bộ đệm codec được sử dụng để giữ trạng thái nội bộ.

Lưu ý rằng không có định vị lại luồng nên diễn ra. Phương pháp này chủ yếu nhằm mục đích phục hồi từ các lỗi giải mã.

Ngoài các phương thức trên, bytes7 cũng phải kế thừa tất cả các phương thức và thuộc tính khác từ luồng cơ bản.

StreamReaderWriter Objects¶

ValueError1 là một lớp tiện lợi cho phép các luồng kết thúc hoạt động trong cả chế độ đọc và ghi.

Thiết kế sao cho người ta có thể sử dụng các chức năng nhà máy được trả về bởi hàm bytes8 để xây dựng thể hiện.

ClassCodecs.StreamReaderWriter (Stream, Reader, Writer, Error = 'Strict') ¶codecs.StreamReaderWriter(stream, Reader, Writer, errors='strict')

Tạo một ví dụ ValueError1. luồng phải là một đối tượng giống như tệp. Người đọc và nhà văn phải là các chức năng hoặc lớp của nhà máy cung cấp giao diện bytes7 và bytes6. Xử lý lỗi được thực hiện theo cách tương tự như được xác định cho các độc giả và nhà văn luồng.

ValueError1 Các trường hợp xác định các giao diện kết hợp của các lớp bytes7 và bytes6. Họ thừa hưởng tất cả các phương thức và thuộc tính khác từ luồng cơ bản.

StreamRecoder Đối tượng

UnicodeEncodeError1 dịch dữ liệu từ mã hóa này sang mã hóa khác, đôi khi rất hữu ích khi xử lý các môi trường mã hóa khác nhau.

Thiết kế sao cho người ta có thể sử dụng các chức năng nhà máy được trả về bởi hàm bytes8 để xây dựng thể hiện.

ClassCodecs.StreamReaderWriter (Stream, Reader, Writer, Error = 'Strict') ¶ codecs.StreamRecoder(stream, encode, decode, Reader, Writer, errors='strict')

Tạo một ví dụ ValueError1. luồng phải là một đối tượng giống như tệp. Người đọc và nhà văn phải là các chức năng hoặc lớp của nhà máy cung cấp giao diện bytes7 và bytes6. Xử lý lỗi được thực hiện theo cách tương tự như được xác định cho các độc giả và nhà văn luồng.

ValueError1 Các trường hợp xác định các giao diện kết hợp của các lớp bytes7 và bytes6. Họ thừa hưởng tất cả các phương thức và thuộc tính khác từ luồng cơ bản.

StreamRecoder Đối tượng

UnicodeEncodeError1 dịch dữ liệu từ mã hóa này sang mã hóa khác, đôi khi rất hữu ích khi xử lý các môi trường mã hóa khác nhau.

Error handling is done in the same way as defined for the stream readers and writers.

UnicodeEncodeError1 instances define the combined interfaces of bytes7 and bytes6 classes. They inherit all other methods and attributes from the underlying stream.

Encodings and Unicode¶

Strings are stored internally as sequences of code points in range bytes90–bytes91. (See PEP 393 for more details about the implementation.) Once a string object is used outside of CPU and memory, endianness and how these arrays are stored as bytes become an issue. As with other codecs, serialising a string into a sequence of bytes is known as encoding, and recreating the string from the sequence of bytes is known as decoding. There are a variety of different text serialisation codecs, which are collectivity referred to as text encodings.

The simplest text encoding (called bytes92 or bytes93) maps the code points 0–255 to the bytes bytes94–bytes95, which means that a string object that contains code points above bytes96 can’t be encoded with this codec. Doing so will raise a UnicodeEncodeError that looks like the following (although the details of the error message may differ): bytes98.

There’s another group of encodings (the so called charmap encodings) that choose a different subset of all Unicode code points and how these code points are mapped to the bytes bytes94–bytes95. To see how this is done simply open e.g. 'strict'01 (which is an encoding that is used primarily on Windows). There’s a string constant with 256 characters that shows you which character is mapped to which byte value.

All of these encodings can only encode 256 of the 1114112 code points defined in Unicode. A simple and straightforward way that can store each Unicode code point, is to store each code point as four consecutive bytes. There are two possibilities: store the bytes in big endian or in little endian order. These two encodings are called 'strict'02 and 'strict'03 respectively. Their disadvantage is that if e.g. you use 'strict'02 on a little endian machine you will always have to swap bytes on encoding and decoding. 'strict'05 avoids this problem: bytes will always be in natural endianness. When these bytes are read by a CPU with a different endianness, then bytes have to be swapped though. To be able to detect the endianness of a 'strict'06 or 'strict'05 byte sequence, there’s the so called BOM (“Byte Order Mark”). This is the Unicode character 'strict'08. This character can be prepended to every 'strict'06 or 'strict'05 byte sequence. The byte swapped version of this character ('strict'11) is an illegal character that may not appear in a Unicode text. So when the first character in a 'strict'06 or 'strict'05 byte sequence appears to be a 'strict'14 the bytes have to be swapped on decoding. Unfortunately the character 'strict'08 had a second purpose as a 'strict'16: a character that has no width and doesn’t allow a word to be split. It can e.g. be used to give hints to a ligature algorithm. With Unicode 4.0 using 'strict'08 as a 'strict'16 has been deprecated (with 'strict'19 ('strict'20) assuming this role). Nevertheless Unicode software still must be able to handle 'strict'08 in both roles: as a BOM it’s a device to determine the storage layout of the encoded bytes, and vanishes once the byte sequence has been decoded into a string; as a 'strict'22 it’s a normal character that will be decoded like any other.

There’s another encoding that is able to encode the full range of Unicode characters: UTF-8. UTF-8 is an 8-bit encoding, which means there are no issues with byte order in UTF-8. Each byte in a UTF-8 byte sequence consists of two parts: marker bits (the most significant bits) and payload bits. The marker bits are a sequence of zero to four 'strict'23 bits followed by a bytes39 bit. Unicode characters are encoded like this (with x being payload bits, which when concatenated give the Unicode character):

Range

Encoding

'strict'25 … 'strict'26

0xxxxxxx

'strict'27 … 'strict'28

110xxxxx 10xxxxxx

'strict'29 … 'strict'30

1110xxxx 10xxxxxx 10xxxxxx

'strict'31 … 'strict'32

11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

The least significant bit of the Unicode character is the rightmost x bit.

As UTF-8 is an 8-bit encoding no BOM is required and any 'strict'08 character in the decoded string (even if it’s the first character) is treated as a 'strict'34.

Without external information it’s impossible to reliably determine which encoding was used for encoding a string. Each charmap encoding can decode any random byte sequence. However that’s not possible with UTF-8, as UTF-8 byte sequences have a structure that doesn’t allow arbitrary byte sequences. To increase the reliability with which a UTF-8 encoding can be detected, Microsoft invented a variant of UTF-8 (that Python calls 'strict'35) for its Notepad program: Before any of the Unicode characters is written to the file, a UTF-8 encoded BOM (which looks like this as a byte sequence: 'strict'36, 'strict'37, 'strict'38) is written. As it’s rather improbable that any charmap encoded file starts with these byte values (which would e.g. map to

Latin nhỏ chữ I với đường đi

Dấu ngoặc kép bên phải

Dấu hỏi đảo ngược

Trong ISO-8859-1), điều này làm tăng xác suất mã hóa 'strict'39 có thể được đoán chính xác từ chuỗi byte. Vì vậy, ở đây BOM không được sử dụng để có thể xác định thứ tự byte được sử dụng để tạo chuỗi byte, nhưng là một chữ ký giúp đoán mã hóa. Khi mã hóa codec UTF-8-SIG sẽ viết 'strict'36, 'strict'37, 'strict'38 là ba byte đầu tiên cho tệp. Khi giải mã 'strict'39 sẽ bỏ qua ba byte đó nếu chúng xuất hiện dưới dạng ba byte đầu tiên trong tệp. Trong UTF-8, việc sử dụng BOM không được khuyến khích và thường nên tránh.

Mã hóa tiêu chuẩn

Python đi kèm với một số codec tích hợp, được triển khai dưới dạng hàm C hoặc với từ điển dưới dạng bảng ánh xạ. Bảng sau đây liệt kê các codec theo tên, cùng với một vài bí danh phổ biến và các ngôn ngữ mà mã hóa có thể được sử dụng. Cả danh sách các bí danh và danh sách các ngôn ngữ đều có nghĩa là toàn diện. Lưu ý rằng các lựa chọn thay thế chính tả chỉ khác nhau trong trường hợp hoặc sử dụng dấu gạch nối thay vì dấu gạch dưới cũng là bí danh hợp lệ; Do đó, ví dụ: 'strict'44 là bí danh hợp lệ cho codec 'strict'45.

Chi tiết triển khai CPYThon: Một số mã hóa phổ biến có thể bỏ qua bộ máy tra cứu Codecs để cải thiện hiệu suất. Các cơ hội tối ưu hóa này chỉ được CPython công nhận cho một bộ bí danh giới hạn (trường hợp không nhạy cảm) -ascii, UTF-16, UTF16, UTF-32, UTF32 và tương tự bằng cách sử dụng dấu gạch dưới thay vì dấu gạch ngang. Sử dụng các bí danh thay thế cho các mã hóa này có thể dẫn đến việc thực hiện chậm hơn. Some common encodings can bypass the codecs lookup machinery to improve performance. These optimization opportunities are only recognized by CPython for a limited set of (case insensitive) aliases: utf-8, utf8, latin-1, latin1, iso-8859-1, iso8859-1, mbcs (Windows only), ascii, us-ascii, utf-16, utf16, utf-32, utf32, and the same using underscores instead of dashes. Using alternative aliases for these encodings may result in slower execution.

Đã thay đổi trong phiên bản 3.6: Cơ hội tối ưu hóa được công nhận cho US-ASCII.Optimization opportunity recognized for us-ascii.

Nhiều bộ ký tự hỗ trợ cùng một ngôn ngữ. Chúng khác nhau ở các ký tự riêng lẻ (ví dụ: dấu hiệu Euro có được hỗ trợ hay không) và trong việc gán ký tự cho các vị trí mã. Đối với các ngôn ngữ châu Âu nói riêng, các biến thể sau đây thường tồn tại:

  • một mã ISO 8859

  • Trang mã Windows Windows, thường có nguồn gốc từ mã 8859, nhưng thay thế các ký tự điều khiển bằng các ký tự đồ họa bổ sung

  • Trang mã EBCDIC IBM

  • Trang mã PC IBM, tương thích ASCII

Codec

Bí danh

Ngôn ngữ

ascii

646, US-ASCII

Tiếng Anh

big5

BIG5-TW, CSBIG5

Truyền thống Trung Quốc

big5hkscs

BIG5-HKSCS, HKSCS

Truyền thống Trung Quốc

cp037

BIG5-HKSCS, HKSCS

Tiếng Anh

cp273

BIG5-TW, CSBIG5

Truyền thống Trung Quốc

BIG5-HKSCS, HKSCS

cp424

IBM037, IBM039

273, IBM273, CSIBM273

cp437

tiếng Đức

Tiếng Anh

cp500

BIG5-TW, CSBIG5

Truyền thống Trung Quốc

cp720

BIG5-HKSCS, HKSCS

cp737

IBM037, IBM039

cp775

IBM775

273, IBM273, CSIBM273

cp850

tiếng Đức

Truyền thống Trung Quốc

cp852

BIG5-HKSCS, HKSCS

IBM037, IBM039

cp855

273, IBM273, CSIBM273

tiếng Đức

cp856

273, IBM273, CSIBM273

cp857

tiếng Đức

Mới trong phiên bản 3.4.

cp858

EBCDIC-CP-HE, IBM424

Truyền thống Trung Quốc

cp860

BIG5-HKSCS, HKSCS

IBM037, IBM039

cp861

273, IBM273, CSIBM273

tiếng Đức

cp862

Mới trong phiên bản 3.4.

273, IBM273, CSIBM273

cp863

tiếng Đức

Mới trong phiên bản 3.4.

cp864

IBM864

BIG5-HKSCS, HKSCS

cp865

IBM037, IBM039

273, IBM273, CSIBM273

cp866

tiếng Đức

Mới trong phiên bản 3.4.

cp869

EBCDIC-CP-HE, IBM424

IBM037, IBM039

cp874

273, IBM273, CSIBM273

cp875

IBM037, IBM039

cp932

273, IBM273, CSIBM273

tiếng Đức

cp949

Mới trong phiên bản 3.4.

EBCDIC-CP-HE, IBM424

cp950

Tiếng Do Thái

Truyền thống Trung Quốc

cp1006

BIG5-HKSCS, HKSCS

cp1026

ibm1026

Mới trong phiên bản 3.4.

cp1125

EBCDIC-CP-HE, IBM424

Tiếng Do Thái

BIG5-HKSCS, HKSCS

cp1140

ibm1140

Truyền thống Trung Quốc

cp1250

windows-1250

IBM037, IBM039

cp1251

windows-1251

tiếng Đức

cp1252

windows-1252

Truyền thống Trung Quốc

cp1253

windows-1253

IBM037, IBM039

cp1254

windows-1254

Mới trong phiên bản 3.4.

cp1255

windows-1255

273, IBM273, CSIBM273

cp1256

windows-1256

BIG5-HKSCS, HKSCS

cp1257

windows-1257

273, IBM273, CSIBM273

cp1258

windows-1258

tiếng Đức

euc_jp

Mới trong phiên bản 3.4.

tiếng Đức

euc_jis_2004

Mới trong phiên bản 3.4.

tiếng Đức

euc_jisx0213

eucjisx0213

tiếng Đức

euc_kr

Mới trong phiên bản 3.4.

EBCDIC-CP-HE, IBM424

gb2312

Tiếng Do Thái

437, IBM437

EBCDIC-CP-BE, EBCDIC-CP-CH, IBM500

Tây Âu

tiếng Ả Rập

gb18030

gb18030-2000

tiếng Ả Rập

người Hy Lạp

Ngôn ngữ Baltic

437, IBM437

iso2022_jp

EBCDIC-CP-BE, EBCDIC-CP-CH, IBM500

tiếng Đức

iso2022_jp_1

Mới trong phiên bản 3.4.

tiếng Đức

iso2022_jp_2

Mới trong phiên bản 3.4.

EBCDIC-CP-HE, IBM424

iso2022_jp_2004

Tiếng Do Thái

tiếng Đức

iso2022_jp_3

Mới trong phiên bản 3.4.

tiếng Đức

iso2022_jp_ext

Mới trong phiên bản 3.4.

tiếng Đức

iso2022_kr

Mới trong phiên bản 3.4.

EBCDIC-CP-HE, IBM424

latin_1

Tiếng Do Thái

Truyền thống Trung Quốc

iso8859_2

ISO-8859-2, Latin2, L2

Trung và Đông Âu

iso8859_3

ISO-8859-3, Latin3, L3

Esperanto, Malta

iso8859_4

ISO-8859-4, Latin4, L4

Ngôn ngữ Baltic

iso8859_5

ISO-8859-5, Cyrillic

Tiếng Bêl La, Byelorussian, người Macedonia, tiếng Nga

iso8859_6

ISO-8859-6, tiếng Ả Rập

tiếng Ả Rập

iso8859_7

ISO-8859-7, Hy Lạp, Hy Lạp8

người Hy Lạp

iso8859_8

ISO-8859-8, tiếng Do Thái

Tiếng Do Thái

iso8859_9

ISO-8859-9, Latin5, L5

Thổ Nhĩ Kỳ

iso8859_10

ISO-8859-10, Latin6, L6

Ngôn ngữ Bắc Âu

iso8859_11

ISO-8859-11, Thái

Ngôn ngữ Thái Lan

iso8859_13

ISO-8859-13, Latin7, L7

Ngôn ngữ Baltic

iso8859_14

ISO-8859-5, Cyrillic

Tiếng Bêl La, Byelorussian, người Macedonia, tiếng Nga

iso8859_15

ISO-8859-6, tiếng Ả Rập

tiếng Ả Rập

iso8859_16

ISO-8859-7, Hy Lạp, Hy Lạp8

người Hy Lạp

ISO-8859-8, tiếng Do Thái

Tiếng Do Thái

ISO-8859-9, Latin5, L5

koi8_r

Thổ Nhĩ Kỳ

koi8_t

ISO-8859-10, Latin6, L6

Ngôn ngữ Bắc Âu

koi8_u

ISO-8859-11, Thái

kz1048

Ngôn ngữ Thái Lan

ISO-8859-13, Latin7, L7

Ngôn ngữ Bắc Âu

mac_cyrillic

ISO-8859-11, Thái

Tiếng Bêl La, Byelorussian, người Macedonia, tiếng Nga

mac_greek

ISO-8859-6, tiếng Ả Rập

người Hy Lạp

mac_iceland

ISO-8859-8, tiếng Do Thái

Tiếng Do Thái

mac_latin2

ISO-8859-9, Latin5, L5

Trung và Đông Âu

mac_roman

Thổ Nhĩ Kỳ

tiếng Ả Rập

mac_turkish

ISO-8859-7, Hy Lạp, Hy Lạp8

Thổ Nhĩ Kỳ

ptcp154

ISO-8859-10, Latin6, L6

ISO-8859-13, Latin7, L7

shift_jis

ISO-8859-14, Latin8, L8

Ngôn ngữ Celtic

shift_jis_2004

ISO-8859-15, Latin9, L9

Ngôn ngữ Celtic

shift_jisx0213

ISO-8859-15, Latin9, L9

Ngôn ngữ Celtic

utf_32

ISO-8859-15, Latin9, L9

Tây Âu

utf_32_be

UTF-32BE

Tây Âu

utf_32_le

UTF-32LE

Tây Âu

utf_16

ISO-8859-16, Latin10, L10

Tây Âu

utf_16_be

UTF-16BE

Tây Âu

utf_16_le

UTF-16LE

Tây Âu

utf_7

ISO-8859-16, Latin10, L10

Tây Âu

utf_8

ISO-8859-16, Latin10, L10

Tây Âu

utf_8_sig

Tây Âu

ISO-8859-16, Latin10, L10The utf-16* and utf-32* encoders no longer allow surrogate code points (CodecInfo6–CodecInfo7) to be encoded. The utf-32* decoders no longer decode byte sequences that correspond to surrogate code points.

Đông Nam Châu Âu'strict'48 is now an alias to 'strict'49.

JOHAB

CP1361, MS1361

Hàn Quốc

tiếng Ngabytes-like object to UnicodeEncodeError4 decoding, similar to the Unicode text encodings.

Tajik

Mới trong phiên bản 3.5.

Ukraine

KZ_1048, STRK1048_2002, RK1048

KazakhRFC 3490, see also 'strict'53. Only 'strict'54 is supported.

MacCyrillic

MACGALEK

Maciceland

Iceland

maclatin2, maccentraleurope, mac_centeuro

Macroman, Macintosh

Macturkish

CSPTCP154, PT154, CP154, Cyrillic-Asian

Csshiftjis, ShiftJis, SJis, S_Jis

tiếng NhậtRFC 3492. Stateful codecs are not supported.

raw_unicode_escape

ShiftJis2004, SJIS_2004, SJIS2004

ShiftJisx0213, SJISX0213, S_JISX0213

U32, UTF32

unicode_escape

tất cả các ngôn ngữ

U16, UTF16“unicode_internal” codec is removed.

U7, Unicode-1-1-UTF-7

U8, UTF, UTF8, CP65001bytes-like object to bytes mappings. They are not supported by 'strict'58 (which only produces UnicodeEncodeError4 output).

Tajik

Mới trong phiên bản 3.5.

Ukraine

KZ_1048, STRK1048_2002, RK1048

Kazakh

MacCyrillic

MACGALEK

Macicelandaccepts any bytes-like object as input for encoding and decoding

Iceland

bz2_codec

bz2

maclatin2, maccentraleurope, mac_centeuro

Macroman, Macintosh

hex_codec

Macturkish

CSPTCP154, PT154, CP154, Cyrillic-Asian

Csshiftjis, ShiftJis, SJis, S_Jis

quopri_codec

tiếng Nhật

ShiftJis2004, SJIS_2004, SJIS2004

ShiftJisx0213, SJISX0213, S_JISX0213

uu_codec

U32, UTF32

tất cả các ngôn ngữ

U16, UTF16

zlib_codec

U7, Unicode-1-1-UTF-7

U8, UTF, UTF8, CP65001

Đã thay đổi trong phiên bản 3.4: Bộ mã hóa UTF-16* và UTF-32* không còn cho phép các điểm mã thay thế (________ 86, ____________ 87) được mã hóa. Bộ giải mã UTF-32* không còn giải mã các chuỗi byte tương ứng với các điểm mã thay thế.

1

Đã thay đổi trong phiên bản 3.8: 'strict'48 hiện là bí danh của 'strict'49.bytes-like objects, 'strict'74 also accepts ASCII-only instances of UnicodeEncodeError4 for decoding

Mã hóa cụ thể PythonRestoration of the binary transforms.

Đã thay đổi trong phiên bản 3.4: Phục hồi các bí danh cho các biến đổi nhị phân.Restoration of the aliases for the binary transforms.

Transforms văn bản

Codec sau đây cung cấp một phép biến đổi văn bản: ánh xạ UnicodeEncodeError4 sang UnicodeEncodeError4. Nó không được hỗ trợ bởi 'strict'78 (chỉ tạo ra đầu ra bytes).

Codec

Bí danh

Nghĩa

rot_13

rot13

Trả lại mã hóa Caesar-Cypher của toán hạng.

Mới trong phiên bản 3.2: Phục hồi biến đổi văn bản UnicodeEncodeError7.Restoration of the UnicodeEncodeError7 text transform.

Đã thay đổi trong phiên bản 3.4: Phục hồi bí danh 'strict'81.Restoration of the 'strict'81 alias.

'strict'53 - Tên miền quốc tế hóa trong các ứng dụng

Mô -đun này thực hiện RFC 3490 (tên miền quốc tế hóa trong các ứng dụng) và RFC 3492 (NamePrep: Hồ sơ StringPrep cho tên miền quốc tế hóa (IDN)). Nó được xây dựng dựa trên mã hóa 'strict'83 và 'strict'84.RFC 3490 (Internationalized Domain Names in Applications) and RFC 3492 (Nameprep: A Stringprep Profile for Internationalized Domain Names (IDN)). It builds upon the 'strict'83 encoding and 'strict'84.

Nếu bạn cần tiêu chuẩn IDNA 2008 từ RFC 5891 và RFC 5895, hãy sử dụng mô-đun IDNA của bên thứ ba.RFC 5891 and RFC 5895, use the third-party idna module.

Các RFC này cùng nhau xác định một giao thức để hỗ trợ các ký tự không phải ASCII trong các tên miền. Một tên miền chứa các ký tự không phải ASCII (như 'strict'85) được chuyển đổi thành mã hóa tương thích ASCII (ACE, như 'strict'86). Hình thức ACE của tên miền sau đó được sử dụng ở tất cả các nơi mà các ký tự tùy ý không được phép bởi giao thức, chẳng hạn như truy vấn DNS, các trường HTTP, v.v. Chuyển đổi này được thực hiện trong ứng dụng; Nếu có thể vô hình với người dùng: Ứng dụng nên chuyển đổi nhãn tên miền Unicode một cách minh bạch thành IDNA trên dây và chuyển đổi nhãn ACE trở lại Unicode trước khi trình bày chúng cho người dùng.

Python hỗ trợ chuyển đổi này theo nhiều cách: codec 'strict'87 thực hiện chuyển đổi giữa unicode và ace, tách một chuỗi đầu vào thành các nhãn dựa trên các ký tự phân cách được xác định trong Phần 3.1 của RFC 3490 và chuyển đổi từng nhãn thành ACE khi cần thiết Chuỗi byte thành các nhãn dựa trên thiết bị phân tách 'strict'88 và chuyển đổi bất kỳ nhãn ACE nào được tìm thấy thành Unicode. Hơn nữa, mô -đun 'strict'89 chuyển đổi trong suốt tên máy chủ Unicode thành ACE, do đó các ứng dụng không cần phải quan tâm đến việc tự chuyển đổi tên máy chủ khi chúng chuyển chúng đến mô -đun ổ cắm. Trên hết, các mô -đun có tên máy chủ là tham số chức năng, chẳng hạn như 'strict'90 và 'strict'91, chấp nhận tên máy chủ Unicode ('strict'90 sau đó cũng trong việc gửi một tên máy chủ IDNA trong trường nếu nó gửi trường đó).section 3.1 of RFC 3490 and converting each label to ACE as required, and conversely separating an input byte string into labels based on the 'strict'88 separator and converting any ACE labels found into unicode. Furthermore, the 'strict'89 module transparently converts Unicode host names to ACE, so that applications need not be concerned about converting host names themselves when they pass them to the socket module. On top of that, modules that have host names as function parameters, such as 'strict'90 and 'strict'91, accept Unicode host names ('strict'90 then also transparently sends an IDNA hostname in the field if it sends that field at all).

Khi nhận tên máy chủ từ dây (chẳng hạn như trong tra cứu tên ngược), không thực hiện chuyển đổi tự động sang unicode được thực hiện: Các ứng dụng muốn trình bày tên máy chủ đó cho người dùng nên giải mã chúng thành Unicode.

Mô-đun 'strict'53 cũng thực hiện thủ tục tên, thực hiện một số bình thường hóa trên tên máy chủ, để đạt được tính nhạy cảm của các tên miền quốc tế và để thống nhất các ký tự tương tự. Các chức năng NamePrep có thể được sử dụng trực tiếp nếu muốn.

mã hóa.idna.namePrep (nhãn) ¶nameprep(label)

Trả về phiên bản tên của nhãn. Việc triển khai hiện đang giả định các chuỗi truy vấn, vì vậy 'strict'94 là đúng.

mã hóa.idna.toascii (nhãn) ¶ToASCII(label)

Chuyển đổi nhãn thành ASCII, như được chỉ định trong RFC 3490. 'strict'95 được giả sử là sai.RFC 3490. 'strict'95 is assumed to be false.

mã hóa.idna.tounicode (nhãn) ¶ToUnicode(label)

Chuyển đổi nhãn thành Unicode, như được chỉ định trong RFC 3490.RFC 3490.

'strict'96 - Windows ANSI CodePage¶

Mô -đun này thực hiện mã hóa ANSI (CP_ACP).

Tính khả dụng: Windows.: Windows.

Đã thay đổi trong phiên bản 3.3: Hỗ trợ mọi xử lý lỗi.Support any error handler.

Thay đổi trong phiên bản 3.2: Trước 3.2, đối số lỗi đã bị bỏ qua; ValueError5 luôn được sử dụng để mã hóa và ValueError3 để giải mã.Before 3.2, the errors argument was ignored; ValueError5 was always used to encode, and ValueError3 to decode.

'strict'99-codec UTF-8 có chữ ký bom

Mô-đun này thực hiện một biến thể của codec UTF-8. Khi mã hóa, BOM được mã hóa UTF-8 sẽ được chuẩn bị cho UTF-8 được mã hóa byte. Đối với bộ mã hóa trạng thái, điều này chỉ được thực hiện một lần (trên lần ghi đầu tiên vào luồng byte). Khi giải mã, một BOM được mã hóa UTF-8 tùy chọn khi bắt đầu dữ liệu sẽ bị bỏ qua.

Python có sử dụng UTF không

Python 3.3 không còn sử dụng UTF-16, thay vào đó, một mã hóa cho phép biểu diễn nhỏ gọn nhất cho chuỗi đã cho được chọn từ ASCII/Latin-1, UCS-2 và UTF-32. Java ban đầu đã sử dụng UCS-2 và thêm hỗ trợ ký tự bổ sung UTF-16 trong J2SE 5.0. JavaScript có thể sử dụng UCS-2 hoặc UTF-16., instead an encoding that gives the most compact representation for the given string is chosen from ASCII/Latin-1, UCS-2, and UTF-32. Java originally used UCS-2, and added UTF-16 supplementary character support in J2SE 5.0. JavaScript may use UCS-2 or UTF-16.

Tại sao UTF

UTF-8: Nó sử dụng 1, 2, 3 hoặc 4 byte để mã hóa mọi điểm mã.Nó tương thích ngược với ASCII.Tất cả các ký tự tiếng Anh chỉ cần 1 byte - khá hiệu quả.Chúng ta chỉ cần nhiều byte hơn nếu chúng ta gửi các ký tự không phải tiếng Anh.It uses 1, 2, 3 or 4 bytes to encode every code point. It is backwards compatible with ASCII. All English characters just need 1 byte — which is quite efficient. We only need more bytes if we are sending non-English characters.

ASCII mã hóa trong Python là gì?

Phương pháp Python ascii ().ASCII là viết tắt của mã tiêu chuẩn Mỹ để trao đổi thông tin.Đây là một tiêu chuẩn mã hóa ký tự sử dụng các số từ 0 đến 127 để biểu diễn các ký tự tiếng Anh.Ví dụ: mã ASCII cho ký tự A là 65 và 90 là dành cho Z.a character encoding standard that uses numbers from 0 to 127 to represent English characters. For example, ASCII code for the character A is 65, and 90 is for Z.

Loại mã hóa là UTF

UTF-8 là một phương thức mã hóa ký tự Unicode.Điều này có nghĩa là UTF-8 lấy điểm mã cho một ký tự unicode đã cho và dịch nó thành một chuỗi nhị phân.Nó cũng làm ngược lại, đọc theo các chữ số nhị phân và chuyển đổi chúng thành các ký tự.Unicode character encoding method. This means that UTF-8 takes the code point for a given Unicode character and translates it into a string of binary. It also does the reverse, reading in binary digits and converting them back to characters.