Hướng dẫn how do you decode an encoded file in python? - làm thế nào để bạn giải mã một tập tin được mã hóa trong python?

Bạn đang xem các giá trị chuỗi byte, được in dưới dạng kết quả repr() vì chúng được chứa trong một từ điển. Các biểu diễn chuỗi có thể được sử dụng lại dưới dạng chữ Python Chuỗi và các ký tự không được in và không ASCII được hiển thị bằng cách sử dụng chuỗi thoát chuỗi. Các giá trị container luôn được biểu thị bằng repr() để dễ dàng gỡ lỗi.

Do đó, chuỗi 'k \ xc3 \ xA4se' chứa hai byte không ASCII có giá trị HEX C3 và A4, kết hợp UTF-8 cho CodePoint U+00E4.

Bạn nên giải mã các giá trị thành đối tượng unicode:

with open('dictionary.txt') as my_file:
    for line in my_file:   # just loop over the file
        if line.strip(): # ignoring blank lines
            key, value = line.decode('utf8').strip().split(':')
            words[key] = value

Hoặc tốt hơn là sử dụng codecs.open() để giải mã tệp khi bạn đọc nó:

import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value

In từ điển kết quả vẫn sẽ sử dụng kết quả repr() cho nội dung, vì vậy bây giờ bạn sẽ thấy u'cheese': u'K\xe4se' thay thế, vì

import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
0 là mã thoát cho Unicode Point 00e4, ký tự
import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
1. In các từ riêng lẻ nếu bạn muốn các ký tự thực tế được ghi vào thiết bị đầu cuối:

print words['cheese']

Nhưng bây giờ bạn có thể so sánh các giá trị này với các dữ liệu khác mà bạn đã giải mã, miễn là bạn biết mã hóa chính xác của chúng và thao tác chúng và mã hóa chúng một lần nữa cho bất kỳ codec đích nào bạn cần sử dụng.

import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
2 sẽ tự động thực hiện việc này, ví dụ, khi in các giá trị Unicode vào thiết bị đầu cuối của bạn.

Bạn có thể muốn đọc trên Unicode và Python:

  • Tối thiểu tuyệt đối mọi nhà phát triển phần mềm hoàn toàn, tích cực phải biết về các bộ unicode và nhân vật (không có lý do!) Của Joel Spolsky

  • Python unicode howto

  • Unicode thực dụng của ned Batchelder

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

import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
3.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
import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
3.

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à

import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
4 có nghĩa là các lỗi mã hóa tăng
import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
5 (hoặc một lớp con cụ thể CODEC hơn, chẳng hạn như
import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
6). 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à

import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
4 có nghĩa là việc giải mã các lỗi tăng
import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
5 (hoặc một lớp con cụ thể CODEC hơn, chẳng hạn như
import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
9). 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

print words['cheese']
0 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

print words['cheese']
0, một
print words['cheese']
2 sẽ được nâng lên. Mặt khác, đối tượng
print words['cheese']
0 đượ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

print words['cheese']
4 và
print words['cheese']
5 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ở

print words['cheese']
6 và
print words['cheese']
7, 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ở

print words['cheese']
8 và
print words['cheese']
9, 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

>>> 'German ß, ♬'.encode(encoding='ascii', errors='backslashreplace')
b'German \\xdf, \\u266c'
>>> 'German ß, ♬'.encode(encoding='ascii', errors='xmlcharrefreplace')
b'German ß, ♬'
0 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

print words['cheese']
2 trong trường hợp mã hóa không thể 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

print words['cheese']
2 trong trường hợp mã hóa không thể 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

print words['cheese']
2 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

print words['cheese']
2 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

print words['cheese']
2 trong trường hợp mã hóa không thể 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

print words['cheese']
2 trong trường hợp mã hóa không thể 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) ¶

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.Hyphens and spaces are converted to underscore.

Tăng
print words['cheese']
2 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.
unregister(search_function)

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ó.

Tăng

print words['cheese']
2 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.

codecs.getreader (mã hóa) ¶open(filename, mode='r', encoding=None, errors='strict', buffering=- 1)

Tra cứu codec cho mã hóa đã cho và trả về lớp

print words['cheese']
9 hoặc chức năng nhà máy của nó.

codecs.getwriter (mã hóa) ¶

Tra cứu codec cho mã hóa đã cho và trả về lớp

print words['cheese']
8 hoặc chức năng nhà máy của nó.

Codec tùy chỉnh được cung cấp bằng cách đăng ký chức năng tìm kiếm codec phù hợp:

codecs.register (search_function) ¶

Đăng ký một chức năng tìm kiếm codec. Các chức năng tìm kiếm dự kiến ​​sẽ lấy một đối số, là tên mã hóa trong tất cả các chữ cái chữ thường có dấu gạch nối và không gian được chuyển đổi thành dấu gạch dưới và trả về một đối tượng

print words['cheese']
0. Trong trường hợp chức năng tìm kiếm không thể tìm thấy mã hóa đã cho, nó sẽ trả về repr()0.

Đã 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.The repr()2 mode has been removed.

codecs.unregister (search_function) ¶EncodedFile(file, data_encoding, file_encoding=None, errors='strict')

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 repr()1 và mô -đun repr()2 đượ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) ¶

Mở một tệp được mã hóa bằng chế độ đã cho và trả về một thể hiện là repr()3, cung cấp mã hóa/giải mã trong suốt. Chế độ tệp mặc định là repr()4, có nghĩa là mở tệp ở chế độ đọc.iterencode(iterator, encoding, errors='strict', **kwargs)

Ghi chúgenerator. The errors argument (as well as any other keyword argument) is passed through to the incremental encoder.

Nếu mã hóa không phải là repr()0, 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 repr()6 đượ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 repr()1 tích hợp; repr()8 đượ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.iterdecode(iterator, encoding, errors='strict', **kwargs)

Lỗi có thể được đưa ra để xác định xử lý lỗi. Nó mặc định là

import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
4 khiến
import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
5 được nêu ra trong trường hợp xảy ra lỗi mã hóa.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

import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
3 để giải mã. Do đó, nó không hỗ trợ các bộ mã hóa văn bản từ văn bản như repr()9, mặc dù repr()9 có thể được sử dụng tương đương với unicode1.

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. unicode2 là unicode3 hoặc unicode4 Tùy thuộc vào thứ tự byte gốc của nền tảng, unicode5 là bí danh cho unicode2, unicode7 cho unicode4 và unicode9 cho unicode3. 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 codecs.open()1 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

import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
4

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

codecs.open()5

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 codecs.open()6.

codecs.open()7

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

repr()1

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 repr()2 repr()3 repr()4. 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 repr()2. Được thực hiện trong repr()6.

repr()7

Khi giải mã, thay thế byte bằng mã thay thế riêng lẻ từ repr()8 đến repr()9. 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 repr()7 đượ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

u'cheese': u'K\xe4se'1

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

u'cheese': u'K\xe4se'4

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 codecs.open()6.

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

Giá trị

Nghĩa

Nghĩa

u'cheese': u'K\xe4se'7

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

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 codecs.open()6.

Thay thế bằng một điểm đánh dấu thay thế. Khi mã hóa, sử dụng codecs.open()8 (ký tự ASCII). Khi giải mã, sử dụng codecs.open()9 (U+FFFD, ký tự thay thế chính thức). Được thực hiện trong repr()0.The repr()7 and u'cheese': u'K\xe4se'7 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 repr()2 repr()3 repr()4. 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 repr()2. Được thực hiện trong repr()6.The u'cheese': u'K\xe4se'7 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ừ repr()8 đến repr()9. 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 repr()7 được sử dụng khi mã hóa dữ liệu. (Xem PEP 383 để biết thêm.)The u'cheese': u'K\xe4se'4 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 repr()1 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 u'cheese': u'K\xe4se'2 được triển khai trong u'cheese': u'K\xe4se'3.

Thay thế bằng các chuỗi thoát u'cheese': u'K\xe4se'5, 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 u'cheese': u'K\xe4se'6.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

Giải mã và dịch hoạt động tương tự, ngoại trừ

import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
9 hoặc
import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
11 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) ¶lookup_error(name)

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

Tăng

print words['cheese']
2 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:

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

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

import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
4.

Mỗi lỗi mã hóa hoặc giải mã làm tăng codecs.open()3.

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

Thực hiện xử lý lỗi codecs.open()5.

Dữ liệu dị dạng bị bỏ qua; Mã hóa hoặc giải mã được tiếp tục mà không cần thông báo thêm.

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

Thực hiện xử lý lỗi codecs.open()7.

Các sản phẩm thay thế codecs.open()8 (ký tự ASCII) cho các lỗi mã hóa hoặc codecs.open()9 (U+FFFD, ký tự thay thế chính thức) để giải mã các lỗi.

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

Thực hiện xử lý lỗi repr()1.

Dữ liệu dị dạng được thay thế bằng chuỗi thoát hiểm. Khi mã hóa, hãy sử dụng dạng thập phân của điểm mã Unicode với các định dạng repr()2 repr()3 repr()4. 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 repr()2.

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 u'cheese': u'K\xe4se'1 (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 u'cheese': u'K\xe4se'2.

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

Thực hiện xử lý lỗi u'cheese': u'K\xe4se'4 (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 u'cheese': u'K\xe4se'5. 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

import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
28 sẽ được chuyển đổi thành chuỗi byte
import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
29.

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ở

import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
30 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ụ:

import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
31 hoặc
import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
32).text encoding converts a string object to a bytes object using a particular character set encoding (e.g.,
import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
31 or
import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
32).

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

import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
4.

Phương pháp có thể không lưu trữ trạng thái trong ví dụ

import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
30. Sử dụng
print words['cheese']
8 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ý

import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
4.

Phương pháp có thể không lưu trữ trạng thái trong ví dụ

import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
30. Sử dụng
print words['cheese']
8 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 ví dụ
import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
30. Sử dụng
print words['cheese']
9 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.

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

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

print words['cheese']
6.

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.

print words['cheese']
6 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

print words['cheese']
6.

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

Mã hóa đối tượng (đưa trạng thái hiện tại của bộ mã hóa vào tài khoản) và trả về đối tượng được mã hóa kết quả. Nếu đây là cuộc gọi cuối cùng đến cuối cùng

print words['cheese']
4 phải đúng (mặc định là sai).

cài lại()¶()

Đặt lại bộ mã hóa về trạng thái ban đầu. Đầu ra bị loại bỏ: Gọi

import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
50, chuyển một byte trống hoặc chuỗi văn bản nếu cần, để đặt lại bộ mã hóa và để nhận đầu ra.

getstate () ¶()

Trả về trạng thái hiện tại của bộ mã hóa phải là một số nguyên. Việc thực hiện phải đảm bảo rằng

import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
51 là trạng thái phổ biến nhất. .

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

import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
52.

Gia tăng đối tượng

Lớp

print words['cheese']
7 đượ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ụ

print words['cheese']
7.

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.

print words['cheese']
7 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

print words['cheese']
7.

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

print words['cheese']
5 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ộ mã hóa về trạng thái ban đầu. Đầu ra bị loại bỏ: Gọi

import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
50, chuyển một byte trống hoặc chuỗi văn bản nếu cần, để đặt lại bộ mã hóa và để nhận đầu ra.

getstate () ¶()

Trả về trạng thái hiện tại của bộ mã hóa phải là một số nguyên. Việc thực hiện phải đảm bảo rằng

import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
51 là trạng thái phổ biến nhất. .

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

import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
52.

Gia tăng đối tượng

Lớp

print words['cheese']
7 đượ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') ¶

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

print words['cheese']
7.

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.codecs.StreamWriter(stream, errors='strict')

print words['cheese']
7 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

print words['cheese']
7.

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

print words['cheese']
8 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

print words['cheese']
8.

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ể sử dụng được kết nối vào luồng (có thể bằng cách sử dụng lại phương thức

import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
70). 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 các bộ đệm codec được sử dụng để giữ trạng thái nội bộ.

Gọi phương thức này phải đảm bảo rằng dữ liệu trên đầu ra được đưa vào trạng thái sạch cho phép nối thêm dữ liệu mới mà không phải hủy toàn bộ luồng để khôi phục trạng thái.

Ngoài các phương thức trên,

print words['cheese']
8 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.

StreamReader Đối tượng

Lớp

print words['cheese']
9 là một lớp con của
import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
30 và xác định các phương thức sau mà mọi đầu đọc luồng phải xác định để tương thích với sổ đăng ký codec Python.

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

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

print words['cheese']
9.

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ể.

print words['cheese']
9 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

print words['cheese']
9.

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

import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
77.

Đọ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

import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
78 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

import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
78.

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ừ ____ ____25 và được đưa vào 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 ____ ____178.

cài lại()¶()

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

Gọi phương thức này phải đảm bảo rằng dữ liệu trên đầu ra được đưa vào trạng thái sạch cho phép nối thêm dữ liệu mới mà không phải hủy toàn bộ luồng để khôi phục trạng thái.

Ngoài các phương thức trên,

print words['cheese']
8 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.

StreamReader Đối tượng

Lớp

print words['cheese']
9 là một lớp con của
import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
30 và xác định các phương thức sau mà mọi đầu đọc luồng phải xác định để tương thích với sổ đăng ký codec Python.

ClassCodecs.StreamReader (Stream, Error = 'Strict') ¶

Hàm tạo cho một ví dụ
print words['cheese']
9.
codecs.StreamReaderWriter(stream, Reader, Writer, errors='strict')

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.

repr()3 Các trường hợp xác định các giao diện kết hợp của các lớp

print words['cheese']
9 và
print words['cheese']
8. 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

repr()3 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

>>> 'German ß, ♬'.encode(encoding='ascii', errors='backslashreplace')
b'German \\xdf, \\u266c'
>>> 'German ß, ♬'.encode(encoding='ascii', errors='xmlcharrefreplace')
b'German ß, ♬'
0 để xây dựng thể hiện.

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

Tạo một thể hiện repr()3 thực hiện chuyển đổi hai chiều: mã hóa và giải mã hoạt động trên frontend & nbsp;-dữ liệu có thể hiển thị để gọi mã

import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
78 và
import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
70, trong khi người đọc và người viết làm việc trên phần phụ trợ & nbsp;-dữ liệu trong luồng.

Bạn có thể sử dụng các đối tượng này để thực hiện các chuyển đổi trong suốt, ví dụ, từ Latin-1 đến UTF-8 và trở lại.

Đối số luồng phải là một đối tượng giống như tệp.

Các đối số mã hóa và giải mã phải tuân thủ giao diện

import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
30. Người đọc và người viết phải là các chức năng hoặc các lớp của nhà máy cung cấp các đối tượng của giao diện
print words['cheese']
9 và
print words['cheese']
8 tương ứng.

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.

repr()3 Các trường hợp xác định các giao diện kết hợp của các lớp

print words['cheese']
9 và
print words['cheese']
8. 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.

Mã hóa và Unicode¶

Các chuỗi được lưu trữ nội bộ dưới dạng chuỗi các điểm mã trong phạm vi ____ 202, ____________ 203. . Cũng như các codec khác, việc tuần tự hóa một chuỗi thành một chuỗi byte được gọi là mã hóa và tái tạo chuỗi từ chuỗi byte được gọi là giải mã. Có một loạt các codec tuần tự hóa văn bản khác nhau, có tính tập thể được gọi là mã hóa văn bản.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.

Mã hóa văn bản đơn giản nhất (được gọi là

print words['cheese']
04 hoặc
print words['cheese']
05) ánh xạ các điểm mã 0 Phản255 đến byte ________ 206, có nghĩa là một đối tượng chuỗi chứa các điểm mã trên
print words['cheese']
08 có thể được mã hóa với codec này. Làm như vậy sẽ tăng một
import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
6 trông giống như sau (mặc dù các chi tiết của thông báo lỗi có thể khác nhau):
print words['cheese']
10.

Có một nhóm mã hóa khác (cái gọi là mã hóa charmap) chọn một tập hợp con khác của tất cả các điểm mã Unicode và cách các điểm mã này được ánh xạ tới byte ____ ____ 206. Để xem làm thế nào điều này được thực hiện chỉ đơn giản là mở, ví dụ:

print words['cheese']
13 (là một mã hóa được sử dụng chủ yếu trên Windows). Có một hằng số chuỗi với 256 ký tự cho bạn thấy ký tự nào được ánh xạ theo giá trị byte nào.

Tất cả các mã hóa này chỉ có thể mã hóa 256 trong số 1114112 điểm được xác định trong Unicode. Một cách đơn giản và đơn giản có thể lưu trữ từng điểm mã Unicode, là lưu trữ từng điểm mã dưới dạng bốn byte liên tiếp. Có hai khả năng: lưu trữ các byte trong Big Endian hoặc Little Endian Order. Hai mã hóa này được gọi là

print words['cheese']
14 và
print words['cheese']
15 tương ứng. Nhược điểm của họ là nếu ví dụ: Bạn sử dụng
print words['cheese']
14 trên một máy endian nhỏ, bạn sẽ luôn phải trao đổi byte khi mã hóa và giải mã.
print words['cheese']
17 Tránh vấn đề này: Byte sẽ luôn ở trong sự tự nhiên. Khi các byte này được đọc bởi một CPU với một endianness khác, thì byte phải được hoán đổi mặc dù. Để có thể phát hiện độ cuối của trình tự byte
print words['cheese']
18 hoặc
print words['cheese']
17, có cái gọi là BOM (By Byte đặt hàng đánh dấu). Đây là ký tự Unicode
print words['cheese']
20. Nhân vật này có thể được chuẩn bị cho mỗi chuỗi byte
print words['cheese']
18 hoặc
print words['cheese']
17. Phiên bản hoán đổi byte của ký tự này (
print words['cheese']
23) là một nhân vật bất hợp pháp có thể không xuất hiện trong một văn bản Unicode. Vì vậy, khi ký tự đầu tiên trong chuỗi byte
print words['cheese']
18 hoặc
print words['cheese']
17 dường như là một
print words['cheese']
26, các byte phải được hoán đổi khi giải mã. Thật không may, nhân vật
print words['cheese']
20 có mục đích thứ hai là
print words['cheese']
28: một nhân vật không có chiều rộng và không cho phép một từ được chia tách. Nó có thể, ví dụ: được sử dụng để đưa ra gợi ý cho một thuật toán dây chằng. Với Unicode 4.0 sử dụng
print words['cheese']
20 làm
print words['cheese']
28 đã được không dùng nữa (với
print words['cheese']
31 (
print words['cheese']
32) giả định vai trò này). Tuy nhiên, phần mềm Unicode vẫn phải có khả năng xử lý
print words['cheese']
20 trong cả hai vai trò: Là một BOM, nó là một thiết bị để xác định bố cục lưu trữ của các byte được mã hóa và biến mất một khi chuỗi byte đã được giải mã thành một chuỗi; Là một
print words['cheese']
34, nó là một nhân vật bình thường sẽ được giải mã như bất kỳ nhân vật nào khác.

Có một mã hóa khác có thể mã hóa toàn bộ các ký tự Unicode: UTF-8. UTF-8 là mã hóa 8 bit, có nghĩa là không có vấn đề gì với thứ tự byte trong UTF-8. Mỗi byte trong chuỗi Byte UTF-8 bao gồm hai phần: bit đánh dấu (các bit quan trọng nhất) và bit tải trọng. Các bit đánh dấu là một chuỗi từ 0 đến bốn bit

print words['cheese']
35 theo sau là bit
import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
51. Các ký tự Unicode được mã hóa như thế này (với x là bit tải trọng, khi được ghép lại cho ký tự Unicode):

Phạm vi

Mã hóa

print words['cheese']
37
print words['cheese']
38

0xxxxxxx

print words['cheese']
39
print words['cheese']
40

110xxxxxx 10xxxxxxx

print words['cheese']
41
print words['cheese']
42

1110xxxx 10xxxxxx 10xxxxxxx

print words['cheese']
43
print words['cheese']
44

11110xxx 10xxxxxx 10xxxxxx 10xxxxxxx

Bit ít đáng kể nhất của ký tự Unicode là bit X ngoài cùng bên phải.

Vì UTF-8 là mã hóa 8 bit không cần BOM và bất kỳ ký tự

print words['cheese']
20 nào trong chuỗi được giải mã (ngay cả khi nó là ký tự đầu tiên) được coi là
print words['cheese']
46.

Nếu không có thông tin bên ngoài, không thể xác định đáng tin cậy nào mã hóa được sử dụng để mã hóa một chuỗi. Mỗi mã hóa Charmap có thể giải mã bất kỳ chuỗi byte ngẫu nhiên nào. Tuy nhiên, điều đó không thể xảy ra với UTF-8, vì các chuỗi byte UTF-8 có cấu trúc không cho phép các chuỗi byte tùy ý. Để tăng độ tin cậy mà mã hóa UTF-8 có thể được phát hiện, Microsoft đã phát minh ra một biến thể của UTF-8 (mà Python gọi

print words['cheese']
47) cho chương trình Notepad của mình: trước bất kỳ ký tự Unicode nào được ghi vào tệp, UTF-8 BOM được mã hóa (trông giống như một chuỗi byte:
print words['cheese']
48,
print words['cheese']
49,
print words['cheese']
50) được viết. Vì nó khá không thể, bất kỳ tệp được mã hóa Charmap nào cũng bắt đầu với các giá trị byte này (ví dụ: bản đồ để

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

print words['cheese']
51 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
print words['cheese']
48,
print words['cheese']
49,
print words['cheese']
50 là ba byte đầu tiên cho tệp. Khi giải mã
print words['cheese']
51 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ụ:

print words['cheese']
56 là bí danh hợp lệ cho codec
print words['cheese']
57.

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

Tiếng Do Thái

cp857

857, IBM857

Thổ Nhĩ Kỳ

cp858

858, IBM858

Tây Âu

cp860

860, IBM860

Bồ Đào Nha

cp861

861, CP-IS, IBM861

Iceland

cp862

862, IBM862

Tiếng Do Thái

cp863

863, IBM863

người Canada

cp864

IBM864

tiếng Ả Rập

cp865

865, IBM865

Đan Mạch, Na Uy

cp866

866, IBM866

tiếng Nga

cp869

869, CP-GR, IBM869

người Hy Lạp

cp874

Thái

cp875

người Hy Lạp

cp932

Thái

932, MS932, MSKANJI, MS-KANJI

cp949

tiếng Nhật

949, MS949, UHC

cp950

Hàn Quốc

950, MS950

cp1006

Truyền thống Trung Quốc

cp1026

ibm1026

Thổ Nhĩ Kỳ

cp1125

858, IBM858

Tây Âu

860, IBM860

cp1140

ibm1140

Tây Âu

cp1250

windows-1250

860, IBM860

cp1251

windows-1251

Bồ Đào Nha

cp1252

windows-1252

Tây Âu

cp1253

windows-1253

người Hy Lạp

cp1254

windows-1254

Thổ Nhĩ Kỳ

cp1255

windows-1255

Tiếng Do Thái

cp1256

windows-1256

tiếng Ả Rập

cp1257

windows-1257

865, IBM865

cp1258

windows-1258

Đan Mạch, Na Uy

euc_jp

866, IBM866

932, MS932, MSKANJI, MS-KANJI

euc_jis_2004

tiếng Nhật

932, MS932, MSKANJI, MS-KANJI

euc_jisx0213

eucjisx0213

932, MS932, MSKANJI, MS-KANJI

euc_kr

tiếng Nhật

949, MS949, UHC

gb2312

Hàn Quốc

950, MS950

Truyền thống Trung Quốc

Urdu

1125, IBM1125, CP866U, Ruscii

gb18030

gb18030-2000

1125, IBM1125, CP866U, Ruscii

Ukraine

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

950, MS950

iso2022_jp

Truyền thống Trung Quốc

932, MS932, MSKANJI, MS-KANJI

iso2022_jp_1

tiếng Nhật

932, MS932, MSKANJI, MS-KANJI

iso2022_jp_2

tiếng Nhật

949, MS949, UHC

iso2022_jp_2004

Hàn Quốc

932, MS932, MSKANJI, MS-KANJI

iso2022_jp_3

tiếng Nhật

932, MS932, MSKANJI, MS-KANJI

iso2022_jp_ext

tiếng Nhật

932, MS932, MSKANJI, MS-KANJI

iso2022_kr

tiếng Nhật

949, MS949, UHC

latin_1

Hàn Quốc

Tây Âu

iso8859_2

950, MS950

860, IBM860

iso8859_3

Bồ Đào Nha

861, CP-IS, IBM861

iso8859_4

Iceland

865, IBM865

iso8859_5

Đan Mạch, Na Uy

Bồ Đào Nha

iso8859_6

861, CP-IS, IBM861

tiếng Ả Rập

iso8859_7

865, IBM865

người Hy Lạp

iso8859_8

Thái

Tiếng Do Thái

iso8859_9

932, MS932, MSKANJI, MS-KANJI

Thổ Nhĩ Kỳ

iso8859_10

tiếng Nhật

949, MS949, UHC

iso8859_11

Hàn Quốc

950, MS950

iso8859_13

Truyền thống Trung Quốc

865, IBM865

iso8859_14

Đan Mạch, Na Uy

866, IBM866

iso8859_15

tiếng Nga

Tây Âu

iso8859_16

869, CP-GR, IBM869

người Hy Lạp

Thái

932, MS932, MSKANJI, MS-KANJI

949, MS949, UHC

koi8_r

tiếng Nga

koi8_t

869, CP-GR, IBM869

người Hy Lạp

koi8_u

Tây Âu

kz1048

860, IBM860

Bồ Đào Nha

người Hy Lạp

mac_cyrillic

Thái

Bồ Đào Nha

mac_greek

861, CP-IS, IBM861

người Hy Lạp

mac_iceland

Thái

Iceland

mac_latin2

932, MS932, MSKANJI, MS-KANJI

860, IBM860

mac_roman

Bồ Đào Nha

Tây Âu

mac_turkish

861, CP-IS, IBM861

Thổ Nhĩ Kỳ

ptcp154

Iceland

Bồ Đào Nha

shift_jis

861, CP-IS, IBM861

932, MS932, MSKANJI, MS-KANJI

shift_jis_2004

tiếng Nhật

932, MS932, MSKANJI, MS-KANJI

shift_jisx0213

tiếng Nhật

932, MS932, MSKANJI, MS-KANJI

utf_32

tiếng Nhật

949, MS949, UHC

utf_32_be

UTF-32BE

949, MS949, UHC

utf_32_le

UTF-32LE

949, MS949, UHC

utf_16

Hàn Quốc

949, MS949, UHC

utf_16_be

UTF-16BE

949, MS949, UHC

utf_16_le

UTF-16LE

949, MS949, UHC

utf_7

Hàn Quốc

949, MS949, UHC

utf_8

Hàn Quốc

949, MS949, UHC

utf_8_sig

949, MS949, UHC

Hàn QuốcThe utf-16* and utf-32* encoders no longer allow surrogate code points (u'cheese': u'K\xe4se'8–u'cheese': u'K\xe4se'9) to be encoded. The utf-32* decoders no longer decode byte sequences that correspond to surrogate code points.

950, MS950

print words['cheese']
60 is now an alias to
print words['cheese']
61.

Truyền thống Trung Quốc

Urdu

1125, IBM1125, CP866U, Ruscii

Ukrainebytes-like object to repr()6 decoding, similar to the Unicode text encodings.

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

Trung và Đông Âu

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

Ngôn ngữ Baltic

Tiếng ViệtRFC 3490, see also

print words['cheese']
65. Only
print words['cheese']
66 is supported.

eucjp, ujis, u-jis

JISX0213, EUCJIS2004

Euckr, Hàn Quốc, KSC5601, KS_C-5601, KS_C-5601-1987, KSX1001, KS_X-1001

Trung Quốc, CSISO58GB231280, EUC-CN, EUCCN, EUCGB2312-CN, GB2312-1980, GB2312-80, ISO-IR-58

Tiếng Trung giản thể

GBK

936, CP936, MS936

Trung Quốc thống nhất

Punycode

Thực hiện RFC 3492. Các codec trạng thái không được hỗ trợ.RFC 3492. Stateful codecs are not supported.

raw_unicode_escape

Mã hóa Latin-1 với

print words['cheese']
67 và
print words['cheese']
68 cho các điểm mã khác. Backslash hiện tại không được trốn thoát theo bất kỳ cách nào. Nó được sử dụng trong giao thức Python Pickle.

chưa xác định

Nâng cao một ngoại lệ cho tất cả các chuyển đổi, thậm chí các chuỗi trống. Trình xử lý lỗi bị bỏ qua.

unicode_escape

Mã hóa phù hợp như nội dung của một bản theo nghĩa đen của unicode trong mã nguồn python được mã hóa ASCII-ASCII, ngoại trừ các trích dẫn không được thoát ra. Giải mã từ mã nguồn Latin-1. Hãy coi chừng mã nguồn Python thực sự sử dụng UTF-8 theo mặc định.

Đã thay đổi trong phiên bản 3.8: Codec của Unicode_Inodernal đã bị xóa.“unicode_internal” codec is removed.

BiTHER biến đổi nhị phân

Các codec sau đây cung cấp các biến đổi nhị phân: đối tượng giống như byte cho ánh xạ

import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
3. Chúng không được hỗ trợ bởi
print words['cheese']
70 (chỉ tạo ra đầu ra repr()6).bytes-like object to
import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
3 mappings. They are not supported by
print words['cheese']
70 (which only produces repr()6 output).

Codec

Bí danh

Nghĩa

Bộ mã hóa / bộ giải mã

cơ sở64_codec 1

cơ sở64, base_64

Chuyển đổi toán hạng thành mime base64 multiline (kết quả luôn bao gồm một dấu vết repr()6).

Thay đổi trong phiên bản 3.4: Chấp nhận bất kỳ đối tượng giống như byte nào làm đầu vào để mã hóa và giải mãaccepts any bytes-like object as input for encoding and decoding

print words['cheese']
73 /
print words['cheese']
74

bz2_codec

bz2

Nén toán hạng bằng BZ2.

print words['cheese']
75 /
print words['cheese']
76

hex_codec

Hex

Chuyển đổi toán hạng thành đại diện thập lục phân, với hai chữ số mỗi byte.

print words['cheese']
77 /
print words['cheese']
78

quopri_codec

Quopri, trích dẫn có thể trích dẫn, trích dẫn_printable

Chuyển đổi toán hạng thành mime được trích dẫn có thể in.

print words['cheese']
79 với
print words['cheese']
80 /
print words['cheese']
81

uu_codec

uu

Chuyển đổi toán hạng bằng UUenCode.

print words['cheese']
82 /
print words['cheese']
83

zlib_codec

Zip, Zlib

Nén toán hạng bằng GZIP.

print words['cheese']
84 /
print words['cheese']
85

1

Ngoài các đối tượng giống như byte,

print words['cheese']
86 cũng chấp nhận các trường hợp ASCII-chỉ là repr()6 để giải mãbytes-like objects,
print words['cheese']
86 also accepts ASCII-only instances of repr()6 for decoding

Mới trong phiên bản 3.2: Phục hồi các biến đổi nhị phân.Restoration 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ạ repr()6 sang repr()6. Nó không được hỗ trợ bởi

print words['cheese']
90 (chỉ tạo ra đầu ra
import codecs

with codecs.open('dictionary.txt', 'r', 'utf8') as my_file:
    for line in my_file:
        if line.strip(): # ignoring blank lines
            key, value = line.strip().split(':')
            words[key] = value
3).

Codec

Bí danh

Nghĩa

rot_13

rot13

Bộ mã hóa / bộ giải mã

cơ sở64_codec 1Restoration of the repr()9 text transform.

cơ sở64, base_64Restoration of the

print words['cheese']
93 alias.

Chuyển đổi toán hạng thành mime base64 multiline (kết quả luôn bao gồm một dấu vết repr()6).

Thay đổi trong phiên bản 3.4: Chấp nhận bất kỳ đối tượng giống như byte nào làm đầu vào để mã hóa và giải mãRFC 3490 (Internationalized Domain Names in Applications) and RFC 3492 (Nameprep: A Stringprep Profile for Internationalized Domain Names (IDN)). It builds upon the

print words['cheese']
95 encoding and
print words['cheese']
96.

print words['cheese']
73 /
print words['cheese']
74RFC 5891 and RFC 5895, use the third-party idna module.

Nén toán hạng bằng BZ2.

print words['cheese']
75 /
print words['cheese']
76section 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
>>> 'German ß, ♬'.encode(encoding='ascii', errors='backslashreplace')
b'German \\xdf, \\u266c'
>>> 'German ß, ♬'.encode(encoding='ascii', errors='xmlcharrefreplace')
b'German ß, ♬'
00 separator and converting any ACE labels found into unicode. Furthermore, the
>>> 'German ß, ♬'.encode(encoding='ascii', errors='backslashreplace')
b'German \\xdf, \\u266c'
>>> 'German ß, ♬'.encode(encoding='ascii', errors='xmlcharrefreplace')
b'German ß, ♬'
01 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
>>> 'German ß, ♬'.encode(encoding='ascii', errors='backslashreplace')
b'German \\xdf, \\u266c'
>>> 'German ß, ♬'.encode(encoding='ascii', errors='xmlcharrefreplace')
b'German ß, ♬'
02 and
>>> 'German ß, ♬'.encode(encoding='ascii', errors='backslashreplace')
b'German \\xdf, \\u266c'
>>> 'German ß, ♬'.encode(encoding='ascii', errors='xmlcharrefreplace')
b'German ß, ♬'
03, accept Unicode host names (
>>> 'German ß, ♬'.encode(encoding='ascii', errors='backslashreplace')
b'German \\xdf, \\u266c'
>>> 'German ß, ♬'.encode(encoding='ascii', errors='xmlcharrefreplace')
b'German ß, ♬'
02 then also transparently sends an IDNA hostname in the field if it sends that field at all).

Hex

Chuyển đổi toán hạng thành đại diện thập lục phân, với hai chữ số mỗi byte.

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

>>> 'German ß, ♬'.encode(encoding='ascii', errors='backslashreplace')
b'German \\xdf, \\u266c'
>>> 'German ß, ♬'.encode(encoding='ascii', errors='xmlcharrefreplace')
b'German ß, ♬'
06 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.

>>> 'German ß, ♬'.encode(encoding='ascii', errors='backslashreplace')
b'German \\xdf, \\u266c'
>>> 'German ß, ♬'.encode(encoding='ascii', errors='xmlcharrefreplace')
b'German ß, ♬'
07 được giả sử là sai.RFC 3490.
>>> 'German ß, ♬'.encode(encoding='ascii', errors='backslashreplace')
b'German \\xdf, \\u266c'
>>> 'German ß, ♬'.encode(encoding='ascii', errors='xmlcharrefreplace')
b'German ß, ♬'
07 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.

>>> 'German ß, ♬'.encode(encoding='ascii', errors='backslashreplace') b'German \\xdf, \\u266c' >>> 'German ß, ♬'.encode(encoding='ascii', errors='xmlcharrefreplace') b'German ß, ♬' 08 - 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; codecs.open()7 luôn được sử dụng để mã hóa và codecs.open()5 để giải mã.Before 3.2, the errors argument was ignored; codecs.open()7 was always used to encode, and codecs.open()5 to decode.

>>> 'German ß, ♬'.encode(encoding='ascii', errors='backslashreplace') b'German \\xdf, \\u266c' >>> 'German ß, ♬'.encode(encoding='ascii', errors='xmlcharrefreplace') b'German ß, ♬' 11-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.

Làm thế nào để mã hóa và giải mã hoạt động Python?

Vì Encode () chuyển đổi một chuỗi thành byte, decode () chỉ đơn giản là ngược lại.Điều này cho thấy rằng decode () chuyển đổi byte thành chuỗi python.Tương tự như mã của Encode (), tham số giải mã quyết định loại mã hóa mà từ đó chuỗi byte được giải mã.encode() converts a string to bytes, decode() simply does the reverse. This shows that decode() converts bytes to a Python string. Similar to those of encode() , the decoding parameter decides the type of encoding from which the byte sequence is decoded.

Mã hóa = 'latin1 trong python là gì?

Mã hóa văn bản đơn giản nhất (được gọi là 'Latin-1' hoặc 'ISO-8859-1') ánh xạ các điểm mã 0 NottT được mã hóa với codec này.maps the code points 0–255 to the bytes 0x0 – 0xff , which means that a string object that contains code points above U+00FF can't be encoded with this codec.

Làm thế nào để Python xử lý mã hóa?

Python String Encode () Phương thức Cú pháp:..
Cú pháp: Mã hóa (mã hóa, lỗi).
Parameters:.
Trả về: Trả về chuỗi ở dạng được mã hóa ..