Python đọc tệp utf 16

Chào các cậu,

Tôi đang xử lý một tệp được mã hóa UTF-16 bằng BOM và lúc đầu tôi không biết về
gói codec. Tôi đã viết đoạn mã sau.
===== Mã 1============================
for i in open["d:\python24\lzjtest.xml", 'r'].readlines[]:
i = tôi. giải mã ["utf-16"]
in tôi
====================== .
Output was:
Truy nguyên [lần gọi gần đây nhất].
Tệp "D. \Python24\testutf-16. py", dòng 4, trong -toplevel-
i = i. giải mã["utf-16"]
Tệp "D. \Python24\lib\encodings\utf_16. py", dòng 16, trong giải mã
trả về codec. utf_16_decode[đầu vào, lỗi, Đúng]
Lỗi UnicodeDecode. 'utf16' codec không thể giải mã byte 0x0a ở vị trí
84. dữ liệu bị cắt bớt

Tôi đã tìm kiếm trên google và tìm thấy một bài viết về vấn đề tương tự nói rằng hãy sử dụng
split[]. Tôi đã không hoàn toàn nắm bắt được ý nghĩa của bài viết và viết lại như.
==== Mã 2==============================
for i in open["d:\python24\lzjtest.xml", 'r'].read[].split['\r\n']:
i = tôi. giải mã ["utf-16"]
in tôi
====================== .
Then it worked [echo the file].

Sau này mình làm quen với codec và viết đoạn code sau

==== Mã 3 ==============
nhập . mở ["d. \python24\lzjtesttvs2. xml", 'r', 'utf-16']. đường đọc [].
for i in codecs.open["d:\python24\lzjtesttvs2.xml", 'r', 'utf-16'].readlines[]:
in tôi
============================= .
It worked and echo the file.

Tôi thắc mắc không biết mã đầu tiên có vấn đề gì và tại sao lỗi
được khắc phục trong
mã thứ hai.

Cảm ơn trước

-Zhongjian

Tim Vàng

2008-10-22 07. 52. 54 UTC

liên kết cố định

Bài đăng của Mark Tolonen

Bài đăng của Tim Golden

Bài đăng của Tim Brown
Xin chào,
I'm trying to create and append unicode strings to a utf-16 text file.
Điều tốt nhất tôi có thể nghĩ ra là sử dụng codec. open[] với
mã hóa 'utf-16' nhưng khi tôi nối thêm, tôi nhận được một BOM UTF16
khác được đưa vào tệp mà các chương trình khác không có . -[
Có cách nào để ngăn codec thực hiện việc này hay có cách
tốt hơn để tạo và thêm dữ liệu vào tệp văn bản utf-16 không?>> 'German ß, ♬'.encode[encoding='ascii', errors='backslashreplace'] b'German \\xdf, \\u266c' >>> 'German ß, ♬'.encode[encoding='ascii', errors='xmlcharrefreplace'] b'German ß, ♬'

Có thể sử dụng các trình xử lý lỗi sau với tất cả các Mã hóa tiêu chuẩn codec của Python.

Giá trị

Nghĩa

CodecInfo2

Nâng cao CodecInfo22 [hoặc một lớp con], đây là giá trị mặc định. Thực hiện trong CodecInfo23

CodecInfo24

Bỏ qua dữ liệu không đúng định dạng và tiếp tục mà không cần thông báo thêm. Thực hiện trong CodecInfo25

CodecInfo26

Thay thế bằng một điểm đánh dấu thay thế. Khi mã hóa, hãy sử dụng CodecInfo27 [ký tự ASCII]. Khi giải mã, hãy sử dụng CodecInfo28 [U+FFFD, KÝ TỰ THAY THẾ chính thức]. Thực hiện trong CodecInfo29

codecs10

Thay thế bằng các chuỗi thoát dấu gạch chéo ngược. Khi mã hóa, hãy sử dụng dạng thập lục phân của điểm mã Unicode với các định dạng codecs11 codecs12 codecs13. Khi giải mã, hãy sử dụng dạng thập lục phân của giá trị byte có định dạng codecs11. Thực hiện trong codecs15

codecs16

Khi giải mã, thay thế byte bằng mã thay thế riêng lẻ trong khoảng từ codecs17 đến codecs18. Mã này sau đó sẽ được chuyển trở lại cùng một byte khi trình xử lý lỗi codecs16 được sử dụng khi mã hóa dữ liệu. [Xem PEP 383 để biết thêm. ]

Các trình xử lý lỗi sau chỉ áp dụng cho mã hóa [trong mã hóa văn bản ].

Giá trị

Nghĩa

codecs20

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

codecs23

Thay thế bằng chuỗi thoát codecs24, những gì xuất hiện trong dấu ngoặc nhọn là thuộc tính Tên từ Cơ sở dữ liệu ký tự Unicode. Thực hiện trong codecs25

Ngoài ra, trình xử lý lỗi sau dành riêng cho các codec nhất định

Giá trị

codec

Nghĩa

codecs26

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ế [codecs27 - codecs28] như đ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 codecs15 là một lỗi

Mới trong phiên bản 3. 1. Trình xử lý lỗi codecs16 và codecs26.

Đã thay đổi trong phiên bản 3. 4. Trình xử lý lỗi codecs26 hiện hoạt động với codec utf-16* và utf-32*.

Mới trong phiên bản 3. 5. Trình xử lý lỗi codecs23.

Đã thay đổi trong phiên bản 3. 5. Trình xử lý lỗi codecs10 hiện hoạt động với chức năng 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ý trình xử lý lỗi có tên mới

codec. register_error[tên , error_handler]

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

Để mã hóa, error_handler sẽ được gọi với phiên bản CodecInfo2, chứa thông tin về vị trí xảy ra lỗi. Trình xử lý lỗi phải đưa ra ngoại lệ này hoặc ngoại lệ khác hoặc trả về một bộ có phần thay thế cho phần không mã hóa được của đầu vào và vị trí tiếp tục mã hóa. Sự thay thế có thể là codecs15 hoặc CodecInfo1. Nếu thay thế là byte, bộ mã hóa sẽ chỉ 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 ban đầu ở vị trí đã chỉ định. Các giá trị vị trí phủ định sẽ được coi là có 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, một CodecInfo8 sẽ được nâng lên

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

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

codec. lookup_error[tên]

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

Tăng một codecs1 trong trường hợp không thể tìm thấy trình xử lý

Các trình xử lý lỗi tiêu chuẩn sau đây cũng được cung cấp dưới dạng các hàm cấp mô-đun

codec. strict_errors[ngoại lệ]

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

Mỗi lỗi mã hóa hoặc giải mã sẽ làm tăng CodecInfo22

codec. ignore_errors[ngoại lệ]

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

Dữ liệu không đúng định dạng bị bỏ qua;

codec. replace_errors[ngoại lệ]

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

Thay thế CodecInfo27 [ký tự ASCII] cho lỗi mã hóa hoặc CodecInfo28 [U+FFFD, KÝ TỰ THAY THẾ chính thức] cho lỗi giải mã

codec. backslashreplace_errors[ngoại lệ]

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

Dữ liệu không đúng định dạng được thay thế bằng chuỗi thoát có dấu gạch chéo ngược. Về mã hóa, hãy sử dụng dạng thập lục phân của điểm mã Unicode với các định dạng codecs11 codecs12 codecs13. Khi giải mã, hãy sử dụng dạng thập lục phân của giá trị byte có định dạng codecs11

Đã thay đổi trong phiên bản 3. 5. Làm việc với giải mã và dịch.

codec. xmlcharrefreplace_errors[ngoại lệ]

Triển khai xử lý lỗi codecs20 [chỉ dành cho mã hóa trong mã hóa văn bản ].

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

codec. namereplace_errors[ngoại lệ]

Triển khai xử lý lỗi codecs23 [chỉ dành cho mã hóa trong mã hóa văn bản ].

Ký tự không thể mã hóa được thay thế bằng chuỗi thoát codecs24. Tập hợp các ký tự xuất hiện trong dấu ngoặc nhọn là thuộc tính Tên từ Cơ sở dữ liệu ký tự Unicode. Ví dụ: ký tự viết thường của Đức codecs17 sẽ được chuyển đổi thành chuỗi byte codecs18

Mới trong phiên bản 3. 5

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

Lớp cơ sở codecs19 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à giải mã phi trạng thái

Bộ giải mã. mã hóa[đầu vào , lỗi='strict']

Mã hóa đối tượng đầu vào và trả về một bộ [đối tượng đầu ra, độ dài tiêu thụ]. Chẳng hạn, mã hóa văn bản chuyển đố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ể [e. g. , codecs20 hoặc codecs21].

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

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

Bộ mã hóa phải có khả năng xử lý đầu vào có độ dài bằng 0 và trả về một đối tượng trống của loại đối tượng đầu ra trong trường hợp này

Bộ giải mã. giải mã[đầu vào , lỗi='strict']

Giải mã đối tượng đầu vào và trả về một bộ [đố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ã sẽ chuyển đổi một đối tượng byte được mã hóa bằng mã hóa bộ ký tự cụ thể thành một đối tượng chuỗi.

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

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

Phương thức có thể không lưu trữ trạng thái trong trường hợp codecs19. Sử dụng codecs8 cho các codec phải giữ trạng thái để 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 0 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 và giải mã tăng dần¶

Các lớp codecs5 và codecs6 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 không được thực hiện với một lệnh gọi đến chức năng bộ mã hóa/giải mã không trạng thái, mà với nhiều lệnh gọi đến phương thức codecs3/codecs4 của bộ mã hóa/giải mã gia tăng. Bộ mã hóa/giải mã gia tăng theo dõi quá trình mã hóa/giải mã trong khi gọi phương thức

Đầu ra đã nối của các lệnh gọi phương thức codecs3/codecs4 giống như thể tất cả các đầu vào đơn lẻ được nối thành một và đầu vào này được mã hóa/giải mã bằng bộ mã hóa/giải mã phi trạng thái

Đối tượng IncrementalEncoder¶

Lớp codecs5 được sử dụng để mã hóa đầu vào theo nhiều bước. Nó định nghĩa 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

lớp codec. IncrementalEncoder[lỗi=']

Trình xây dựng cho phiên bản codecs5

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. Họ có thể 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 mới được sử dụng bởi cơ quan đăng ký codec Python

____codecs5 có thể triển khai 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 để biết 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 giúp có thể chuyển đổi giữa các chiến lược xử lý lỗi khác nhau trong suốt thời gian tồn tại của đối tượng codecs5

mã hóa[đối tượng , cuối cùng=False]

Mã hóa đối tượng [tính đến trạng thái hiện tại của bộ mã hóa] và trả về đối tượng được mã hóa kết quả. Nếu đây là lần gọi cuối cùng tới codecs3 thì cuối cùng phải đúng [mặc định là sai]

đặt lại[]

Đặt lại bộ mã hóa về trạng thái ban đầu. Đầu ra bị loại bỏ. gọi codecs39, 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à số nguyên. Việc triển khai phải đảm bảo rằng codecs40 là trạng thái phổ biến nhất. [Các trạng thái phức tạp hơn số nguyên có thể được chuyển đổi thành số nguyên bằng cách sắp xếp lại/chọn lọc trạng thái và mã hóa các byte của chuỗi kết quả thành một số nguyên. ]

setstate[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 bộ mã hóa được trả về bởi codecs41

Đối tượng Bộ giải mã Gia tăng¶

Lớp codecs6 được sử dụng để giải mã đầu vào theo nhiều bước. Nó định nghĩa 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

lớp codec. IncrementalDecoder[lỗi=']

Constructor cho một phiên bản codecs6

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. Họ có thể 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 mới được sử dụng bởi cơ quan đăng ký codec Python

_______36 có thể triển khai 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 để biết 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 giúp có thể chuyển đổi giữa các chiến lược xử lý lỗi khác nhau trong suốt thời gian tồn tại của đối tượng codecs6

giải mã[đối tượng , cuối cùng=False]

Giải mã đối tượng [tính đến trạng thái hiện tại của bộ giải mã] và trả về đối tượng được giải mã kết quả. Nếu đây là lần gọi cuối cùng tới codecs4 thì cuối cùng phải là true [mặc định là false]. Nếu final là true thì 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 là không thể [e. g. do 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ể phát sinh ngoại lệ]

đặt 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 bộ có hai mục, mục đầu tiên phải là bộ đệm chứa đầu vào vẫn chưa được giải mã. Thứ hai phải là một số nguyên và có thể là thông tin trạng thái bổ sung. [Việc triển khai phải đảm bảo rằng codecs40 là thông tin trạng thái bổ sung phổ biến nhất. ] Nếu thông tin trạng thái bổ sung này là codecs40, thì phải có thể đặt bộ giải mã thành trạng thái không có đầu vào được đệm và codecs40 làm thông tin trạng thái bổ sung, để việc cung cấp đầu vào được đệm trước đó cho bộ giải mã đưa đầu vào trở về trạng thái trước đó mà không tạo ra . [Thông tin trạng thái bổ sung phức tạp hơn số nguyên có thể được chuyển đổi thành số nguyên bằng cách sắp xếp/chọn lọc thông tin và mã hóa các byte của chuỗi kết quả thành số nguyên. ]

setstate[state]

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

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

Các lớp codecs7 và codecs8 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ô-đun con mã hóa mới rất dễ dàng. Xem codecs53 để biết ví dụ về cách thực hiện việc này

Đối tượng StreamWriter¶

Lớp codecs7 là một lớp con của codecs19 và định nghĩa các phương thức sau đây 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

lớp codec. StreamWriter[luồng , lỗi='strict']

Trình xây dựng cho phiên bản codecs7

Tất cả những người viết luồng phải cung cấp giao diện hàm tạo này. Họ có thể 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 mới đượ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ở để ghi văn bản hoặc dữ liệu nhị phân, phù hợp với codec cụ thể

_______37 có thể triển khai 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 để biết các trình xử lý lỗi tiêu chuẩn mà codec luồng bên dưới có thể hỗ trợ.

Đố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 giúp có thể chuyển đổi giữa các chiến lược xử lý lỗi khác nhau trong suốt thời gian tồn tại của đối tượng codecs7

ghi[đối tượng]

Ghi nội dung của đối tượng được mã hóa vào luồng

writelines[list]

Ghi chuỗi có thể lặp lại được nối vào luồng [có thể bằng cách sử dụng lại phương thức codecs59]. Các lần lặp vô hạn hoặc rất lớn không được hỗ trợ. Codec byte-to-byte tiêu chuẩn không hỗ trợ phương pháp này

đặt lại[]

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

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

Ngoài các phương thức trên, codecs7 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 bên dưới

Đối tượng StreamReader¶

Lớp codecs8 là lớp con của codecs19 và định nghĩa các phương thức sau đây mà mọi trình đọc luồng phải xác định để tương thích với sổ đăng ký codec Python

lớp codec. StreamReader[luồng , lỗi='strict']

Trình xây dựng cho phiên bản codecs8

Tất cả các trình đọc luồng phải cung cấp giao diện hàm tạo này. Họ có thể 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 mới đượ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, phù hợp với codec cụ thể

_codecs8 có thể triển khai 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 để biết các trình xử lý lỗi tiêu chuẩn mà codec luồng bên dưới có thể hỗ trợ.

Đố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 giúp có thể chuyển đổi giữa các chiến lược xử lý lỗi khác nhau trong suốt thời gian tồn tại của đối tượng codecs8

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

đọc[kích thước=- 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ố ký tự cho biết số lượng điểm mã hoặc byte được giải mã sẽ trả về. Phương thức codecs67 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ó đủ dữ liệu

Đối số kích thước cho biết số lượng tối đa gần đúng của byte được mã hóa hoặ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 cho biết đọc và giải mã càng nhiều càng tốt. Tham số này nhằm tránh phải giải mã các tệp lớn trong một bước

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

Phương thức nên sử dụng chiến lược đọc tham lam, nghĩa là nó sẽ đọ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, e. g. nếu phần cuối mã hóa tùy chọn hoặc điểm đánh dấu trạng thái có sẵn trên luồng, bạn cũng nên đọc những phần cuối này

đường đọc[kích thước=Không có, keepends=True]

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

kích thước, nếu được cung cấp, được chuyển dưới dạng đối số kích thước cho phương thức codecs67 của luồng

Nếu keepends là false, các kết thúc dòng sẽ bị xóa khỏi các dòng được trả về

đường đọc[sizehint=Không có, 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 codecs4 của codec và được bao gồm trong các mục nhập danh sách nếu keepends là đúng

sizehint, nếu được cung cấp, được truyền dưới dạng đối số kích thước cho phương thức codecs67 của luồng

đặt lại[]

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

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

Ngoài các phương thức trên, codecs8 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 bên dưới

Đối tượng StreamReaderWriter¶

CodecInfo22 là một lớp tiện lợi cho phép gói các luồng hoạt động ở cả chế độ đọc và ghi

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

lớp codec. StreamReaderWriter[stream , Reader, Writer, errors='strict']

Tạo một phiên bản CodecInfo22. luồng phải là một đối tượng giống như tệp. Reader và Writer phải là các hàm hoặc lớp xuất xưởng cung cấp giao diện codecs8 và codecs7. Xử lý lỗi được thực hiện theo cách tương tự như được xác định cho trình đọc và ghi luồng

Các thể hiện của CodecInfo22 định nghĩa các giao diện kết hợp của các lớp codecs8 và codecs7. Chúng kế thừa tất cả các phương thức và thuộc tính khác từ luồng bên dưới

Đối tượng StreamRecoder¶

codecs12 dịch dữ liệu từ mã hóa này sang mã hóa khác, điều này đôi khi 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 hàm xuất xưởng được trả về bởi hàm codecs9 để xây dựng thể hiện

lớp codec. StreamRecoder[stream , mã hóa, decode, Reader, Writer, errors='strict']

Tạo một phiên bản codecs12 thực hiện chuyển đổi hai chiều. mã hóa và giải mã hoạt động trên giao diện người dùng — dữ liệu hiển thị đối với lệnh gọi mã codecs67 và codecs59, trong khi Trình đọc và Trình ghi hoạt động trên phần phụ trợ — dữ liệu trong luồng

Bạn có thể sử dụng các đối tượng này để thực hiện chuyển mã trong suốt, e. g. , từ Latin-1 đến UTF-8 và ngược 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 codecs19. Reader và Writer phải là các hàm hoặc lớp xuất xưởng cung cấp các đối tượng của giao diện codecs8 và codecs7 tương ứng

Xử lý lỗi được thực hiện theo cách tương tự như được xác định cho trình đọc và ghi luồng

Các thể hiện của codecs12 định nghĩa các giao diện kết hợp của các lớp codecs8 và codecs7. Chúng kế thừa tất cả các phương thức và thuộc tính khác từ luồng bên dưới

Mã hóa và Unicode¶

Chuỗi được lưu trữ nội bộ dưới dạng chuỗi điểm mã trong phạm vi codecs91–codecs92. [Xem PEP 393 để biết thêm chi tiết về việc thực hiện. ] Khi một đối tượng chuỗi được sử dụng bên ngoài CPU và bộ nhớ, tuổi thọ và cách các mảng này được lưu trữ dưới dạng byte trở thành một vấn đề. 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ạo lại chuỗi từ chuỗi byte được gọi là giải mã. Có nhiều loại codec tuần tự hóa văn bản khác nhau, được gọi chung là mã hóa văn bản .

Mã hóa văn bản đơn giản nhất [được gọi là codecs93 hoặc codecs94] ánh xạ các điểm mã 0–255 thành các byte codecs95–codecs96, có nghĩa là không thể mã hóa một đối tượng chuỗi chứa các điểm mã trên codecs97 bằng codec này. Làm như vậy sẽ tạo ra một CodecInfo2 giống như sau [mặc dù chi tiết của thông báo lỗi có thể khác]. codecs99

Có một nhóm mã hóa khác [được 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 các byte codecs95–codecs96. Để xem làm thế nào điều này được thực hiện chỉ cần mở e. g. CodecInfo102 [là mã hóa được sử dụng chủ yếu trên Windows]. Có một hằng chuỗi với 256 ký tự cho bạn biết ký tự nào được ánh xạ tới 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 mã được xác định bằng Unicode. Một cách đơn giản và dễ hiểu để 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 theo thứ tự endian lớn hoặc endian nhỏ. Hai bảng mã này lần lượt có tên là CodecInfo103 và CodecInfo104. Bất lợi của họ là nếu e. g. bạn sử dụng CodecInfo103 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ã. CodecInfo106 tránh vấn đề này. byte sẽ luôn ở dạng endian tự nhiên. Khi các byte này được đọc bởi CPU có độ bền khác nhau, thì các byte phải được hoán đổi mặc dù. Để có thể phát hiện tuổi thọ của chuỗi byte CodecInfo107 hoặc CodecInfo106, có cái gọi là BOM [“Dấu thứ tự byte”]. Đây là ký tự Unicode CodecInfo109. Ký tự này có thể được thêm vào trước mỗi chuỗi byte CodecInfo107 hoặc CodecInfo106. Phiên bản hoán đổi byte của ký tự này [CodecInfo112] là một ký tự không hợp lệ có thể không xuất hiện trong văn bản Unicode. Vì vậy, khi ký tự đầu tiên trong chuỗi byte CodecInfo107 hoặc CodecInfo106 có vẻ là một CodecInfo115 thì các byte phải được hoán đổi khi giải mã. Thật không may, ký tự CodecInfo109 có mục đích thứ hai là một CodecInfo117. một ký tự không có chiều rộng và không cho phép tách một từ. nó có thể. g. được sử dụng để đưa ra gợi ý cho một thuật toán chữ ghép. Với Unicode 4. 0 sử dụng CodecInfo109 làm CodecInfo117 đã không còn được dùng nữa [với CodecInfo120 [CodecInfo121] đảm nhận vai trò này]. Tuy nhiên, phần mềm Unicode vẫn phải có khả năng xử lý CodecInfo109 ở cả hai vai trò. với tư cách 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 sau khi chuỗi byte đã được giải mã thành một chuỗi;

Có một mã hóa khác có thể mã hóa đầy đủ 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 [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 4 bit CodecInfo124 theo sau là bit codecs40. Các ký tự Unicode được mã hóa như thế này [với x là các bit tải trọng, khi được nối sẽ tạo ra ký tự Unicode]

Phạm vi

mã hóa

________ 2126 … ________ 2127

0xxxxxxxx

CodecInfo128 … CodecInfo129

110xxxxxx 10xxxxxx

CodecInfo130 … CodecInfo131

1110xxxxx 10xxxxxx 10xxxxxx

CodecInfo132 … CodecInfo133

11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

Bit ít quan trọng 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 nên không cần BOM và bất kỳ ký tự CodecInfo109 nào trong chuỗi được giải mã [ngay cả khi đó là ký tự đầu tiên] đều được coi là CodecInfo117

Không có thông tin bên ngoài, không thể xác định một cách đáng tin cậy mã hóa nào đã đượ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 đó là không thể 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 là CodecInfo136] cho chương trình Notepad của mình. Trước khi bất kỳ ký tự Unicode nào được ghi vào tệp, BOM được mã hóa UTF-8 [trông giống như chuỗi byte này. CodecInfo137, CodecInfo138, CodecInfo139] được viết. Vì không thể xảy ra trường hợp bất kỳ tệp mã hóa charmap nào cũng bắt đầu bằng các giá trị byte này [điều này sẽ. g. Bản đồ đến

CHỮ NHỎ LATIN I VỚI DIAERESIS

DẤU GIÁC ĐÔI GÓC CHỈ PHẢI

DẤU CÂU HỎI ĐẢO NGƯỢC

trong iso-8859-1], điều này làm tăng khả năng mã hóa CodecInfo140 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, mà là một chữ ký giúp đoán mã hóa. Khi mã hóa, codec utf-8-sig sẽ ghi CodecInfo137, CodecInfo138, CodecInfo139 dưới dạng ba byte đầu tiên vào tệp. Khi giải mã CodecInfo140 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 sẵn, đượ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 số 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 bí danh lẫn danh sách ngôn ngữ đều không đầy đủ. Lưu ý rằng các lựa chọn thay thế chính tả chỉ khác nhau về chữ hoa chữ thường 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ệ; . g. CodecInfo145 là bí danh hợp lệ cho codec CodecInfo146

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 codec để cải thiện hiệu suất. Các cơ hội tối ưu hóa này chỉ được CPython nhận ra đối với một bộ bí danh [không phân biệt chữ hoa chữ thường] giới hạn. utf-8, utf8, latin-1, latin1, iso-8859-1, iso8859-1, mbcs [chỉ dành cho Windows], ascii, us-ascii, utf-16, utf16, utf-32, utf32 và sử dụng tương tự . Sử dụng bí danh thay thế cho các mã hóa này có thể dẫn đến thực thi chậm hơn

Đã thay đổi trong phiên bản 3. 6. Cơ hội tối ưu hóa được công nhận cho chúng tôi-ascii.

Nhiều bộ ký tự hỗ trợ cùng ngôn ngữ. Chúng khác nhau về các ký tự riêng lẻ [e. g. EURO SIGN có được hỗ trợ hay không] và trong việc gán các 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 bộ mã ISO 8859

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

  • một trang mã EBCDIC của IBM

  • một trang mã PC của IBM, tương thích với ASCII

giải mã

bí danh

ngôn ngữ

ascii

646, us-ascii

Tiếng Anh

5 lớn

big5-tw, csbig5

Truyền thống Trung Quốc

big5hkscs

big5-hkscs, hkscs

Truyền thống Trung Quốc

cp037

IBM037, IBM039

Tiếng Anh

cp273

273, IBM273, csIBM273

tiếng Đức

Mới trong phiên bản 3. 4

cp424

EBCDIC-CP-HE, IBM424

tiếng Do Thái

cp437

437, IBM437

Tiếng Anh

cp500

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

Tây Âu

cp720

tiếng Ả Rập

cp737

người Hy Lạp

cp775

IBM775

ngôn ngữ Baltic

cp850

850, IBM850

Tây Âu

cp852

852, IBM852

Trung và Đông Âu

cp855

855, IBM855

Tiếng Bulgary, Tiếng Byelorussia, Tiếng Macedonia, Tiếng Nga, Tiếng Serbia

cp856

tiếng Do Thái

cp857

857, IBM857

Thổ Nhĩ Kỳ

cp858

858, IBM858

Tây Âu

cp860

860, IBM860

tiếng Bồ Đào Nha

cp861

861, CP-IS, IBM861

tiếng 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

tiếng Thái

cp875

người Hy Lạp

cp932

932, ms932, mskanji, ms-kanji

tiếng Nhật

cp949

949, ms949, uhc

Hàn Quốc

cp950

950, ms950

Truyền thống Trung Quốc

cp1006

tiếng Urdu

cp1026

ibm1026

Thổ Nhĩ Kỳ

cp1125

1125, ibm1125, cp866u, ruscii

tiếng Ukraina

Mới trong phiên bản 3. 4

cp1140

ibm1140

Tây Âu

cp1250

cửa sổ-1250

Trung và Đông Âu

cp1251

cửa sổ-1251

Tiếng Bulgary, Tiếng Byelorussia, Tiếng Macedonia, Tiếng Nga, Tiếng Serbia

cp1252

cửa sổ-1252

Tây Âu

cp1253

cửa sổ-1253

người Hy Lạp

cp1254

cửa sổ-1254

Thổ Nhĩ Kỳ

cp1255

cửa sổ-1255

tiếng Do Thái

cp1256

cửa sổ-1256

tiếng Ả Rập

cp1257

cửa sổ-1257

ngôn ngữ Baltic

cp1258

cửa sổ-1258

Tiếng Việt

euc_jp

eucjp, ujis, u-jis

tiếng Nhật

euc_jis_2004

jisx0213, eucjis2004

tiếng Nhật

euc_jisx0213

eucjisx0213

tiếng Nhật

euc_kr

euckr, hàn quốc, ksc5601, ks_c-5601, ks_c-5601-1987, ksx1001, ks_x-1001

Hàn Quốc

gb2312

tiếng trung, csiso58gb231280, euc-cn, euccn, eucgb2312-cn, gb2312-1980, gb2312-80, iso-ir-58

Tiếng Trung giản thể

gbk

936, cp936, ms936

tiếng Trung thống nhất

gb18030

gb18030-2000

tiếng Trung thống nhất

hz

hzgb, hz-gb, hz-gb-2312

Tiếng Trung giản thể

iso2022_jp

csiso2022jp, iso2022jp, iso-2022-jp

tiếng Nhật

iso2022_jp_1

iso2022jp-1, iso-2022-jp-1

tiếng Nhật

iso2022_jp_2

iso2022jp-2, iso-2022-jp-2

Nhật Bản, Hàn Quốc, Trung Quốc giản thể, Tây Âu, Hy Lạp

iso2022_jp_2004

iso2022jp-2004, iso-2022-jp-2004

tiếng Nhật

iso2022_jp_3

iso2022jp-3, iso-2022-jp-3

tiếng Nhật

iso2022_jp_ext

iso2022jp-ext, iso-2022-jp-ext

tiếng Nhật

iso2022_kr

csiso2022kr, iso2022kr, iso-2022-kr

Hàn Quốc

tiếng Latinh_1

iso-8859-1, iso8859-1, 8859, cp819, latin, latin1, L1

Tây Âu

iso8859_2

iso-8859-2, latin2, L2

Trung và Đông Âu

iso8859_3

iso-8859-3, latin3, L3

Quốc tế ngữ, tiếng Malta

iso8859_4

iso-8859-4, latin4, L4

ngôn ngữ Baltic

iso8859_5

iso-8859-5, chữ cái

Tiếng Bulgary, Tiếng Byelorussia, Tiếng Macedonia, Tiếng Nga, Tiếng Serbia

iso8859_6

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

tiếng Ả Rập

iso8859_7

iso-8859-7, tiếng Hy Lạp, tiếng 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, tiếng Thái

ngôn ngữ Thái Lan

iso8859_13

iso-8859-13, latin7, L7

ngôn ngữ Baltic

iso8859_14

iso-8859-14, latin8, L8

ngôn ngữ Celtic

iso8859_15

iso-8859-15, latin9, L9

Tây Âu

iso8859_16

iso-8859-16, latin10, L10

Đông Nam Châu Âu

vui vẻ

cp1361, ms1361

Hàn Quốc

koi8_r

tiếng Nga

koi8_t

tajik

Mới trong phiên bản 3. 5

koi8_u

tiếng Ukraina

kz1048

kz_1048, strk1048_2002, rk1048

tiếng Kazakh

Mới trong phiên bản 3. 5

mac_cyrillic

maccyrillic

Tiếng Bulgary, Tiếng Byelorussia, Tiếng Macedonia, Tiếng Nga, Tiếng Serbia

mac_greek

macgreek

người Hy Lạp

mac_iceland

maciceland

tiếng Iceland

mac_latin2

mactin2, maccentraleurope, mac_centeuro

Trung và Đông Âu

mac_roman

macroman, macintosh

Tây Âu

mac_thổ Nhĩ Kỳ

người macturk

Thổ Nhĩ Kỳ

ptcp154

csptcp154, pt154, cp154, cyrillic-asian

tiếng Kazakh

shift_jis

csshiftjis, shiftjis, sjis, s_jis

tiếng Nhật

shift_jis_2004

shiftjis2004, sjis_2004, sjis2004

tiếng Nhật

shift_jisx0213

shiftjisx0213, sjisx0213, s_jisx0213

tiếng Nhật

utf_32

U32, utf32

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

utf_32_be

UTF-32BE

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

utf_32_le

UTF-32LE

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

utf_16

u16, u16

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

utf_16_be

UTF-16BE

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

utf_16_le

UTF-16LE

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

utf_7

U7, unicode-1-1-utf-7

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

utf_8

U8, UTF, utf8, cp65001

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

utf_8_sig

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

Đã 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 mã hóa các điểm mã thay thế [codecs27–codecs28]. 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ế.

Đã thay đổi trong phiên bản 3. 8. ______2149 hiện là bí danh của CodecInfo150.

Mã hóa cụ thể của Python¶

Một số codec được xác định trước dành riêng cho Python, vì vậy tên codec của chúng không có ý nghĩa gì bên ngoài Python. Chúng được liệt kê trong các bảng bên dưới dựa trên các loại đầu vào và đầu ra dự kiến ​​[lưu ý rằng mặc dù mã hóa văn bản là trường hợp sử dụng phổ biến nhất cho codec, cơ sở hạ tầng codec cơ bản hỗ trợ biến đổi dữ liệu tùy ý thay vì chỉ mã hóa văn bản]. Đối với codec bất đối xứng, ý nghĩa đã nêu mô tả hướng mã hóa

Mã hóa văn bản¶

Các codec sau cung cấp khả năng mã hóa codecs15 sang CodecInfo1 và đối tượng giống như byte giải mã codecs15, tương tự như mã hóa văn bản Unicode.

giải mã

bí danh

Nghĩa

idna

Triển khai RFC 3490, xem thêm CodecInfo154. Chỉ hỗ trợ CodecInfo155

mbc

ansi, dbcs

chỉ cửa sổ. Mã hóa toán hạng theo bảng mã ANSI [CP_ACP]

oem

chỉ cửa sổ. Mã hóa toán hạng theo bảng mã OEM [CP_OEMCP]

Mới trong phiên bản 3. 6

lòng bàn tay

Mã hóa của PalmOS 3. 5

mã trừng phạt

Triển khai RFC 3492. Codec trạng thái không được hỗ trợ

raw_unicode_escape

Mã hóa Latin-1 với CodecInfo156 và CodecInfo157 cho các điểm mã khác. Dấu gạch chéo ngược hiện tại không được thoát theo bất kỳ cách nào. Nó được sử dụng trong giao thức dưa chua Python

chưa xác định

Đưa ra một ngoại lệ cho tất cả các chuyển đổi, ngay cả các chuỗi trống. Trình xử lý lỗi bị bỏ qua

unicode_escape

Mã hóa phù hợp với nội dung của một chữ Unicode trong mã nguồn Python được mã hóa ASCII, ngoại trừ các dấu ngoặc kép không được thoát. Giải mã từ mã nguồn Latin-1. 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. Bộ giải mã “unicode_internal” đã bị xóa.

Biến đổi nhị phân¶

Các codec sau cung cấp phép biến đổi nhị phân. đối tượng dạng byte ánh xạ tới CodecInfo1. Chúng không được hỗ trợ bởi CodecInfo159 [chỉ tạo đầu ra codecs15].

giải mã

bí danh

Nghĩa

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

cơ sở64_codec 1

cơ sở64, cơ sở64

Chuyển đổi toán hạng thành MIME base64 nhiều dòng [kết quả luôn bao gồm một dấu CodecInfo25]

Đã thay đổi trong phiên bản 3. 4. chấp nhận bất kỳ đối tượng giống byte nào làm đầu vào để mã hóa và giải mã

CodecInfo162 / CodecInfo163

bz2_codec

bz2

Nén toán hạng bằng bz2

CodecInfo164 / CodecInfo165

hex_codec

lục giác

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

CodecInfo166 / CodecInfo167

quopri_codec

quopri, quoteableprintable, quote_printable

Chuyển toán hạng sang trích dẫn MIME có thể in được

CodecInfo168 với CodecInfo169 / CodecInfo170

uu_codec

ưu

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

________ 2171 / ________ 2172

zlib_codec

zip, zlib

Nén toán hạng bằng gzip

________ 2173 / ________ 2174

1

Ngoài đối tượng giống như byte , CodecInfo175 cũng chấp nhận các phiên bản chỉ có mã ASCII của codecs15 để giải mã

Mới trong phiên bản 3. 2. Khôi phục các phép biến đổi nhị phân.

Đã thay đổi trong phiên bản 3. 4. Khôi phục bí danh cho phép biến đổi nhị phân.

Chuyển đổi văn bản¶

Codec sau đây cung cấp một chuyển đổi văn bản. ánh xạ codecs15 đến codecs15. Nó không được hỗ trợ bởi CodecInfo179 [chỉ tạo ra đầu ra CodecInfo1]

giải mã

bí danh

Nghĩa

thối_13

thối13

Trả về mã hóa Caesar-cypher của toán hạng

Mới trong phiên bản 3. 2. Khôi phục biến đổi văn bản codecs18.

Đã thay đổi trong phiên bản 3. 4. Khôi phục bí danh CodecInfo182.

CodecInfo154 — Tên miền quốc tế hóa trong các ứng dụng¶

Mô-đun này triển khai RFC 3490 [Tên miền quốc tế hóa trong ứng dụng] và RFC 3492 [Nameprep. Cấu hình 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 CodecInfo184 và CodecInfo185

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

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 tên miền. Một tên miền chứa các ký tự không phải ASCII [chẳng hạn như CodecInfo186] được chuyển đổi thành mã hóa tương thích với ASCII [ACE, chẳng hạn như CodecInfo187]. Sau đó, dạng ACE của tên miền được sử dụng ở tất cả những nơi mà giao thức không cho phép các ký tự tùy ý, chẳng hạn như truy vấn DNS, trường Máy chủ HTTP, v.v. Việc chuyển đổi này được thực hiện trong ứng dụng; . Ứng dụng phải chuyển đổi rõ ràng các nhãn miền Unicode thành IDNA trên dây và chuyển đổi ngược lại các nhãn ACE thành Unicode trước khi hiển thị chúng cho người dùng

Python hỗ trợ chuyển đổi này theo nhiều cách. bộ giải mã CodecInfo188 thực hiện chuyển đổi giữa Unicode và ACE, tách chuỗi đầu vào thành các nhãn dựa trên các ký tự phân tá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 theo yêu cầu và ngược lại, tách chuỗi byte đầu vào thành các nhãn dựa trên dấu tách CodecInfo189 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 CodecInfo190 chuyển đổi tên máy chủ Unicode sang ACE một cách trong suốt, do đó các ứng dụng không cần quan tâm đến việc tự chuyển đổi tên máy chủ khi chúng chuyển chúng sang mô-đun ổ cắm. Ngoài ra, các mô-đun có tên máy chủ làm tham số chức năng, chẳng hạn như CodecInfo191 và CodecInfo192, chấp nhận tên máy chủ Unicode [CodecInfo191 sau đó cũng gửi tên máy chủ IDNA trong trường Máy chủ nếu nó hoàn toàn gửi trường đó]

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

Mô-đun CodecInfo154 cũng thực hiện quy trình nameprep, thực hiện một số chuẩn hóa nhất định trên tên máy chủ, để đạt được sự phân biệt chữ hoa chữ thường của 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]

Trả lại phiên bản được đặt tên trước của nhãn. Việc triển khai hiện giả định các chuỗi truy vấn, vì vậy, CodecInfo195 là đúng

mã hóa. idna. Tới ASCII[nhãn]

Chuyển đổi nhãn thành ASCII, như được chỉ định trong RFC 3490. CodecInfo196 được coi là sai

mã hóa. idna. Tới Unicode[nhãn]

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

CodecInfo197 — Windows ANSI codepage¶

Mô-đun này triển khai bảng mã ANSI [CP_ACP]

Tính khả dụng . các cửa sổ.

Đã thay đổi trong phiên bản 3. 3. Hỗ trợ mọi trình xử lý lỗi.

Đã thay đổi trong phiên bản 3. 2. Trước 3. 2, đối số lỗi đã bị bỏ qua; .

CodecInfo200 — Codec UTF-8 có chữ ký BOM¶

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

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

Trăn 3. 3 không còn sử dụng UTF-16 nữa, thay vào đó, mã hóa cung cấ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.

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

UTF-8 là một trong những mã hóa được sử dụng phổ biến nhất và Python thường mặc định sử dụng nó . UTF là viết tắt của “Định dạng chuyển đổi Unicode” và '8' có nghĩa là các giá trị 8 bit được sử dụng trong mã hóa.

SIG utf8 là gì?

"sig" trong "utf-8-sig" là viết tắt của "chữ ký" [i. e. chữ ký tệp utf-8] . Sử dụng utf-8-sig để đọc tệp sẽ coi BOM là siêu dữ liệu giải thích cách diễn giải tệp, thay vì là một phần của nội dung tệp.

Làm cách nào tôi có thể biết mã hóa tệp trong Windows là gì?

Mở tệp của bạn bằng Notepad vanilla cũ thông thường đi kèm với Windows. Nó sẽ hiển thị cho bạn mã hóa của tệp khi bạn nhấp vào "Lưu dưới dạng. " . Dù mã hóa được chọn mặc định là gì thì đó là mã hóa hiện tại của bạn dành cho tệp.

Chủ Đề