Giải mã byte python
Một số người cho rằng việc thực hiện mã hóa/giải mã trong Python là đơn giản và không quan trọng. Nhưng đó là họ chưa gặp phải những vấn đề giải quyết kiến trúc. Thật có thể là Python có hỗ trợ Unicode đầy đủ. Và nhờ vào hàm 2, chúng ta có thể tùy ý thay đổi cách xử lý lỗi Show Select back to encoding in PythonMột số khái niệm cơ bảnTrong Python 3, khái niệm chuỗi và byte có nhiều thay đổi lớn. Chúng ta cần nắm lấy một số khái niệm dưới đây
Dưới đây là một số ví dụ CharacterCode pointByte (ASCII)Byte (UTF-8)1U+0031\x31\x31aU+0061\x61\x61μU+03BCKhông hỗ trợ\xce\xbcụU+1EE5Không hỗ trợ\xe1\xbb\xa5Trong các ví dụ trên, ta thấy rằng một số điểm mã có thể được mã hóa bằng UTF-8 nhưng lại không thể mã hóa bằng 0. Đó là do 0 chỉ sử dụng 7 bit để mã hóa từng ký tự, trong khi UTF-8 có thể sử dụng tới 4 byte cho mỗi ký tựChúng ta không thể mã hóa 2 bằng 0. Và chúng ta cũng không thể giải mã chuỗi byte UTF-8 của 2 bằng 0
Trình xử lý xử lý lỗi tích hợp sẵnCả hai hàm str. mã hóa và hàm byte. giải mã đều hỗ trợ một số tham số với tên gọi 6. Nếu ta truyền tên của một trình xử lý vào tham số này, thời gian chạy sẽ sử dụng trình xử lý đó để xử lý các lỗi mà nó gặp phải. Dưới đây là các trình xử lý mặc định
Tự tạo handler để xử lý lỗiTrong phần lớn các trường hợp, các trình xử lý mặc định là đủ dùng. Nhưng nếu ta muốn sử dụng logic của mình để xử lý lỗi thì ta có thể tự tạo handler Use register_error function to register register handler mớiĐầu tiên, ta phải thêm handler của mình vào danh sách trong codec mô-đun bằng hàm 7 0Sau đó, ta có thể truyền cái tên 8 vào tham số 6 như khi sử dụng handler có sẵn 3Cách tạo trình xử lý mớiMột trình xử lý phải đáp ứng đủ 2 điều kiện dưới đây
Ví dụ minh họaChúng ta sẽ thử tạo handler để thay thế các ký tự lỗi bằng ký tự 09. Ta cũng sẽ ghi lại thông tin chi tiết về lỗi 4Xử lý lỗi khi mã hóaTa sẽ mã hóa dòng chữ 30 bằng tiêu chuẩn 0 và xử lý lỗi với 32 8The results is as after 9Có thể thấy hàm 32 đã phát hiện ra 2 vị trí mà 0 không hỗ trợ. Đó là chỉ số 35 và chỉ số 36. Ta đã thay thế cả hai bằng các ký tự 09Xử lý lỗi khi giải mãTương tự trên, ta sẽ giải mã biến 38 đã tạo ở phần trước bằng 0 và 32 3Dưới đây là kết quả 9Một điều đáng chú ý ở đây là ký tự 41 được chuyển thành 42, còn 43 được chuyển thành 44. Nguyên nhân do 45 là mã hóa chuẩn với độ dài không cố định. Ký tự 41 được mã hóa bằng 2 byte ( 47), còn ký tự 43 được mã hóa bằng 3 byte (_______249). Mỗi khi ta gặp phải một byte trong năm trên, 0 sẽ bị lỗi và thời gian chạy sẽ gọi hàm 32endNếu ta chỉ cần làm việc với tệp 0 thì vấn đề mã hóa trong Python là đơn giản. Nhưng trong phần lớn các trường hợp, chúng ta sẽ phải sử dụng Unicode. Khi đó, hiểu biết về cách tự viết handler để xử lý lỗi sẽ có ích cho chúng ta |