Làm cách nào để giải mã trong python 3?
Có thể cho rằng các tính năng mới quan trọng nhất được giới thiệu trong Python 3 là triển khai mới của Show Cả hai đều hết lòng chào đón những thay đổi. Đặc biệt, quyết định mặc định Unicode đã giúp loại bỏ rất nhiều rắc rối trong công việc hàng ngày của chúng tôi với tư cách là nhà phát triển (ai đã nói Một Chút Lịch Sử TL; DR Máy tính chuyển đổi các ký tự thành số theo ánh xạ được công nhận rộng rãi có tên là Unicode. Unicode là siêu bộ của một ánh xạ cũ hơn nhưng vẫn thực tế được gọi là ASCII. Các số này được lưu trong bộ nhớ và thành tệp theo nhiều tiêu chuẩn khác nhau được gọi là bảng mã. Phổ biến nhất và trong số các bảng mã này là UTF-8 Có rất nhiều bài viết thú vị trên Internet về lý do đằng sau ASCII và Unicode, và bạn có thể muốn xem chúng nếu muốn tìm hiểu sâu hơn về toàn bộ câu chuyện. Hãy làm tổng quan nhanh để hiểu rõ hơn các vấn đề hiện tại Ngày xưa, việc lưu văn bản trên máy tính dễ dàng như chuyển đổi từng ký tự thành một số từ 0 đến 127, tức là bảy bit không gian. Điều đó đủ để lưu trữ tất cả các số, chữ cái, dấu chấm câu và ký tự điều khiển mà một người viết tiếng Anh trung bình cần. Ánh xạ này là một tiêu chuẩn đã được thống nhất gọi là Hầu hết các máy tính vào thời điểm đó đều sử dụng tám bit cho một byte, nghĩa là có thêm một số dung lượng trống cho một bộ bổ sung gồm 128 ký tự nữa. Vấn đề là, phạm vi phổ trên ASCII tiêu chuẩn này khá miễn phí, vì vậy các tổ chức khác nhau bắt đầu sử dụng nó cho các mục đích khác nhau. Điều này dẫn đến một mớ hỗn độn khổng lồ gồm các bảng ký tự khác nhau trong đó các số giống nhau đại diện cho các chữ cái khác nhau trong các bảng chữ cái khác nhau. Việc chia sẻ tài liệu văn bản trở nên lộn xộn, chưa kể đến bảng chữ cái châu Á với hàng ngàn chữ cái, không thể vừa với không gian 256 ký hiệu này. Đó là nơi Unicode đến để trợ giúp. Một nỗ lực to lớn đã bắt đầu để ánh xạ từng ký tự và biểu tượng mà nhân loại biết đến thành một tập hợp được gọi là điểm mã, tức là một số thập lục phân đại diện cho biểu tượng đó. Vì vậy, tập đoàn Unicode đã quyết định rằng chữ cái tiếng Anh 'Q' là U+0055, chữ cái Latinh 'è' là U+00E8, chữ cái Cyrillic 'й' là U+0439, ký hiệu toán học '√' là U+221A, . Bạn thậm chí có thể tìm thấy một hình tượng cho một đống phân. Vì lý do tương thích, 128 số đầu tiên ánh xạ các ký tự giống như ASCII Bây giờ, vì tất cả chúng ta đã đồng ý gán một số duy nhất cho mỗi và mọi glyph từng được hình thành, và cho rằng có hàng ngàn trên hàng ngàn biểu tượng như vậy được ánh xạ, làm thế nào để chúng ta lưu trữ các điểm mã đó trong máy tính? Tóm lại, các mã hóa khác nhau đã được phát minh để chuyển đổi các điểm mã thành byte, nhưng một trong số chúng được cho là tốt nhất và được sử dụng nhiều nhất. UTF-8. Đây là tiêu chuẩn vàng hiện tại của bảng mã Unicode. Trừ khi bạn biết mình đang làm gì, rất có thể bạn không muốn sử dụng bất cứ thứ gì khác Không có chuỗi nào không có mã hóaNếu bạn đã theo dõi cuộc thảo luận cho đến giờ, có lẽ bạn đã nắm được một điểm quan trọng về việc lưu và đọc văn bản trên máy tính Có một chuỗi mà không biết mã hóa của nó chẳng có ý nghĩa gì cả Bạn chỉ đơn giản là không thể diễn giải và giải mã một chuỗi trừ khi bạn biết mã hóa của nó. Và, mặc dù chúng tôi đã quyết định rằng UTF-8 là tiêu chuẩn vàng của giải mã Unicode, nhưng bạn có thể gặp các bảng mã khác trong công việc của mình với tư cách là một lập trình viên và sẽ cần phải hành động tương ứng Nếu bạn đã từng tìm thấy các ký tự lạ trong nội dung email hoặc trên một trang web, thì đó là do email hoặc trang web đó không khai báo mã hóa, vì vậy ứng dụng thư khách hoặc trình duyệt của bạn đang cố đoán mã hóa và không thể đoán được mã hóa đó Trang Wikipedia tiếng Tây Ban Nha về Unicode do Google Chrome tải với mã hóa sai cố ý. Lưu ý cách các ký tự có dấu được giải mã và hiển thị kém vì Chrome đang cố giải mã sai cách các điểm mã trên 127Vậy còn Unicode trên Python 3 thì sao? Các chuỗi khá lộn xộn trong Python 2. Loại mặc định cho chuỗi là Tất cả điều này đã trở nên tốt đẹp với Python 3. Chúng tôi có hai loại khác nhau và được phân tách nghiêm ngặt ở đây
Bạn buộc phải giữ mọi thứ thẳng thắn, và đó là một điều thực sự tốt. Trong Python 3, mã không thành công ngay lập tức nếu bạn làm việc không tốt và điều đó giúp tiết kiệm rất nhiều phiên sửa lỗi sau này. Tuy nhiên, có một mối quan hệ chặt chẽ giữa
Cả hai phương thức đều chấp nhận một tham số, đó là mã hóa được sử dụng để mã hóa hoặc giải mã. Mặc định cho cả hai là UTF-8 Lưu ý cách các chuỗibytes được thêm b vào trước khi được in trên trình thông dịch PythonMột bức tranh đáng giá ngàn lời nói, vì vậy Loại Hơn nữa, không có cách nào để suy ra mã hóa mà một Truy cập tệp trên Python 3 Như bạn có thể tưởng tượng, điều này có hậu quả rất lớn đối với quá trình ghi và đọc tệp (hoặc các dạng đầu vào khác) trên Python 3 Trong Python 3, đọc tệp ở chế độ Vì lý do tương tự, giao diện phương thức Điều quan trọng là phải hiểu rằng Python không cố gắng đoán mã hóa. Thay vào đó, nó sử dụng mã hóa được trả về từ Các phương pháp hay nhất và khắc phục sự cố với Unicode trên Python3 Bánh mì UnicodeNed Batchhelder vĩ đại đã có một bài nói/bài báo tuyệt vời mà tôi hết lòng giới thiệu nếu bạn thường xuyên phải làm việc với các chuỗi trong Python 3. Trong buổi nói chuyện này, anh ấy đã đặt ra thuật ngữ Unicode Sandwich để đặt tên cho một phương pháp tuyệt vời khi xử lý các chuỗi văn bản trong Python. Sử dụng các từ của riêng mình, cách tiếp cận được đề xuất là
Ý tưởng là sử dụng một đối tượng 2 * 3 = sáuVẫn có một cơ sở mã lớn gồm các chương trình Python 2 và một số thư viện vẫn hỗ trợ cả Py2 và Py3 theo một cách khác, ngay cả trong cùng một phiên bản Benjamin Peterson đã phát triển một thư viện tương thích tuyệt vời có tên là six cung cấp các chức năng để bao bọc sự khác biệt giữa hai phiên bản Python chính. Như bạn có thể tưởng tượng, nó cũng có rất nhiều thứ để quản lý chuỗi. Bạn có thể muốn kiểm tra nó và xem nó có thể giúp bạn phát triển mã tương thích chéo như thế nào Không trộn lẫn str và byteHầu hết các lỗi phát sinh khi xử lý chuỗi là do cố gắng trộn lẫn giữa TypeError: a bytes-like object is required, not 'str' và tương tự, hãy kiểm tra xem bạn có đang sử dụng đúng phương pháp trên đúng đối tượng không. Ngoài ra, hãy kiểm tra xem bạn đã mở tệp đúng cách theo nhu cầu của mình chưa. Thật dễ dàng thất bại trong bài kiểm tra ngăn chặn đã hoạt động trong nhiều năm trên Python 2 Điều kiện Biết mã hóa của bạnHãy để tôi nhấn mạnh khái niệm này một lần nữa. bạn không thể giả vờ giải mã Đoạn thưởng. io. chuỗiIO và io. byteIO Liên quan chặt chẽ đến những thay đổi lớn về chuỗi mà chúng ta vừa thấy là một thay đổi khác liên quan đến các mô-đun Python2 trước đây là Ngoài những khác biệt nhỏ về API và hiệu suất giữa hai mô-đun,
Đơn giản như thế. Chúng trả về hai đối tượng giống như tệp mà bạn có thể sử dụng như bình thường và theo mô hình bánh sandwich. Bạn có thể đọc thêm về cả hai trong tài liệu chính thức Phương thức giải mã trong Python 3 là gì?Python 3 - Phương thức giải mã chuỗi ()
. Nó mặc định là mã hóa chuỗi mặc định. decodes the string using the codec registered for encoding. It defaults to the default string encoding.
Làm cách nào để giải mã mã Python?decode() là một phương thức được chỉ định trong Chuỗi trong Python 2. Phương pháp này được sử dụng để chuyển đổi từ một lược đồ mã hóa, trong đó chuỗi đối số được mã hóa thành lược đồ mã hóa mong muốn. Điều này hoạt động ngược lại với mã hóa. Nó chấp nhận mã hóa của chuỗi mã hóa để giải mã nó và trả về chuỗi gốc.
Cách giải mã chuỗi thành UTFGiải mã các byte được mã hóa UTF-8 thành str. bs. giải mã ('utf-8') Mã hóa chuỗi thành byte UTF-8. S. mã hóa ('utf-8') Mã hóa () trong Python3 là gì?Phương thức encode() trả về phiên bản được mã hóa của chuỗi . Mã hóa mặc định là mã hóa chuỗi mặc định hiện tại. Các lỗi có thể được đưa ra để thiết lập một sơ đồ xử lý lỗi khác. |