Cách xử lý các ký tự unicode trong python
Chúng tôi có thể đọc những dòng văn bản này vì chúng tôi đã quen thuộc với bảng chữ cái Latinh với 26 ký tự được sử dụng trong tiếng Anh. Các ngôn ngữ khác có các ký tự riêng và tất cả chúng đều cần được mã hóa để máy tính của chúng tôi có thể biểu diễn chúng. Trong nhiều thập kỷ, máy tính đã có thể biểu diễn các ký tự dựa trên bảng mã ASCII¹ Show
bảng ASCIIASCII là một tiêu chuẩn gán các chữ cái, số và các ký tự khác trong 256 vị trí có sẵn trong mã 8 bit. Với các ngôn ngữ không sử dụng bảng chữ cái Latinh như tiếng Trung, tiếng Hy Lạp, tiếng Nhật, ASCII sẽ không thể biểu thị các văn bản này và chúng tôi cần một bộ ký tự mới. Chúng là Unicode² bảng UnicodeVăn bản trong Python có thể được trình bày bằng chuỗi unicode hoặc byte Mã hóa chuỗi unicodeHãy định nghĩa một Nó thực sự là một đối tượng thuộc loại Chúng tôi cố gắng xác định một đối tượng byte chứa các ký tự không phải ASCII ("Xin chào, Thế giới" bằng tiếng Trung) Chúng ta có thể định nghĩa một byte bằng chữ b với tiền tốNó hiển thị lỗi cho chúng tôi biết rằng trước tiên chúng tôi sẽ cần chuyển đổi chuỗi của mình bằng các ký tự không phải ASCII thành một đối tượng byte Và chúng tôi sẽ cần cung cấp và mã hóa để thực hiện việc này như sau Kết quả cho phần này của mã có thể được nhìn thấy hình bên dưới Cách tốt hơn để giải quyết mã hóa là sử dụng hàm Như bạn có thể thấy, chúng tôi đã thu được kết quả tương tự như trước đây
Vì Python 3 mặc định sử dụng giải mã byteChuỗi Unicode có thể được mã hóa thành byte bằng cách sử dụng một số mã hóa được xác định trước như
Việc chuyển đổi giữa unicode và byte được thực hiện thông qua chức năng Không có cách nào dễ dàng để xác định loại mã hóa nào được sử dụng trong chuỗi byte Vì vậy, chúng tôi cần cung cấp mã hóa chính xác (utf-8, utf-16, v.v. ) đến phương pháp giải mã Các mẫu biểu thức chính quyHãy nhớ rằng các mẫu biểu thức chính quy cũng áp dụng cho các ký tự không phải là tiếng Latinh. Ở đây, làm cách nào để xóa các ký tự nằm ngoài phạm vi ký tự US-ASCII? Đây là bài viết phải đọc đối với những người thường xuyên xử lý các tệp Unicode (áp dụng cho cả các bảng mã khác) trong công việc hàng ngày của họ. Xử lý các tệp Unicode với tư cách là một học viên xử lý ngôn ngữ tự nhiên là một cơn ác mộng, đặc biệt nếu bạn đang sử dụng hệ điều hành Windows. Hãy tưởng tượng sự thất vọng khi bạn gặp lỗi trong quá trình mã hóa hoặc giải mã chẳng hạn như UnicodeEncodeError: 'mbcs' codec can't decode characters in positionUnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position Hầu hết thời gian, những lỗi như vậy không đủ thông tin trừ khi bạn là người kỳ cựu trong lĩnh vực này. Bạn có thể hỏi tại sao chúng ta cần mã hóa và giải mã các ký tự. Hãy bắt đầu với một lời giải thích đơn giản về Unicode. Dựa trên tài liệu chính thức về python, Unicode (Bộ ký tự được mã hóa chung) là một đặc điểm kỹ thuật nhằm liệt kê mọi ký tự được sử dụng bởi ngôn ngữ của con người và cung cấp cho mỗi ký tự mã duy nhất của riêng nó. Các thông số kỹ thuật Unicode liên tục được sửa đổi và cập nhật để thêm các ngôn ngữ và ký hiệu mới Do đó, mã hóa và giải mã phục vụ như một cách để ánh xạ các ký tự từ văn bản sang byte hoặc ngược lại. Điều này cho phép chúng tôi chuyển chúng giữa các máy tính và sử dụng chúng trong cuộc sống hàng ngày của chúng tôi. Nó trở nên phức tạp hơn khi bạn có các bộ hệ điều hành khác nhau. Ngoài ra, các ngôn ngữ khác nhau có bộ ký tự riêng chỉ có thể hiển thị dưới một số phông chữ nhất định. Để đơn giản, hãy coi nó giống như dịch một ký tự nước ngoài sang một ký tự mà máy móc hiểu được. Trong bài viết này, chúng ta sẽ khám phá một số phương pháp có thể được sử dụng để xử lý các tệp Unicode trong Python. Hãy bắt đầu với các chế độ có sẵn và mã hóa tiêu chuẩn Đọc hoặc ghi tệp thông qua trình quản lý bối cảnhCách an toàn nhất để mở tệp là thông qua trình quản lý ngữ cảnh bằng cách sử dụng câu lệnh with. Nó sẽ tự động đóng tệp cho chúng tôi ngăn chặn mọi sự cố có thể phát sinh Chế độ mặc định là Đoạn mã trên sẽ ghi đè và cắt bớt tệp. Trong một số trường hợp, bạn có thể thích sử dụng chế độ
Bạn có thể kết hợp một số chế độ. , đối với quyền truy cập đọc-ghi nhị phân, chế độ Mã hóa tiêu chuẩn trong PythonĐể chỉ định mã hóa trong Python, bạn chỉ cần chuyển vào một đối số khác trong quá trình khởi tạo trình quản lý ngữ cảnh. Bạn phải chỉ định nó bất cứ khi nào bạn đang đọc hoặc viết các ký tự Unicode. Ví dụ sau đây cho thấy cách thích hợp để nối văn bản Unicode vào một tệp hiện có Nếu bạn không chắc nên sử dụng mã hóa nào, chỉ cần nhập Kiểm tra loại mã hóa qua Notepad++Cá nhân, tôi thích sử dụng Notepad ++ hơn để xem nội dung tệp. Nếu bạn mở tệp bằng Notepad++, bạn có thể thấy loại mã hóa được sử dụng ở dưới cùng bên phải của giao diện người dùng Bạn có thể sửa đổi mã hóa thông qua menu Mã hóa. Nó chấp nhận một loạt các mã hóa được sử dụng phổ biến nhất Hình ảnh hiển thị menu thả xuống khi nhấp vào menu mã hóa. Hình ảnh của tác giảNếu bạn đã từng gặp sự cố không thể chuyển đổi tệp sang mã hóa khác hoặc không đọc được một số mã hóa nhất định mặc dù bạn đã chỉ định chính xác, bạn có thể thử phương pháp ngu ngốc nhưng hiệu quả sau đây
Hầu hết thời gian, điều này sẽ tự động chuyển đổi tất cả các ký tự thành mã hóa mới. Xin lưu ý rằng có thể mất dữ liệu nếu không thể chuyển đổi ký tự dựa trên mã hóa mới Xử lý các ký tự trong một mã hóa không xác địnhNếu bạn đã từng rơi vào trường hợp không xác định được mã hóa và các ký tự hóa ra là một thứ gì đó không xác định, bạn có thể thử sửa đổi đối số lỗi để giải quyết vấn đề Đối số lỗi đề cập đến cách xử lý lỗi mã hóa và giải mã. Xin lưu ý rằng đối số này không thể được sử dụng ở chế độ nhị phân. Các trình xử lý lỗi có sẵn là
Hiển thị các ký tự Unicode trong dấu nhắc lệnhNếu bạn đang chạy dấu nhắc lệnh trong hệ điều hành Windows, nó sẽ gặp sự cố hiển thị ký tự Unicode hầu hết thời gian. hóa ra các ký tự vô nghĩa giống như hình dưới đây Dấu nhắc lệnh hiển thị các ký tự vô nghĩa. Hình ảnh của tác giảĐể giải quyết vấn đề này, chúng tôi cần thay đổi cài đặt thành phông chữ chính xác
Mở đường dẫn tệp có ký tự Unicode — áp dụng cho read_csv qua mô-đun pandasPhần này hơi phức tạp, đặc biệt khi bạn đang sử dụng một số mô-đun Python chẳng hạn như gấu trúc. Giả sử bạn có đường dẫn tệp sau bằng ngôn ngữ không phải tiếng Anh file_path = 'C:\path\to\数据分析\data.csv' Cố gắng đọc tệp qua read_csv sẽ gây ra lỗi đơn giản vì đường dẫn tệp chứa các ký tự Unicode. Đây không phải là vấn đề nếu bạn đang sử dụng hàm open() tích hợp sẵn trong Python. Để giải quyết vấn đề này, trước tiên chúng ta cần mở tệp, sau đó chuyển tệp đó vào hàm read_csv Phần kết luận Hãy tóm tắt lại những gì chúng tôi đã đề cập trong hướng dẫn này. Đầu tiên, chúng tôi đã học được tầm quan trọng của việc sử dụng trình quản lý ngữ cảnh (có câu lệnh) khi đọc và ghi tệp. Chúng tôi đã tiếp xúc với danh sách các chế độ có sẵn và mã hóa tiêu chuẩn có thể được sử dụng trong Python. Bây giờ chúng ta đã biết sử dụng một trình soạn thảo văn bản hiện có như Notepad++ để cung cấp cho chúng ta cái nhìn thoáng qua về mã hóa và cấu trúc của tệp đầu vào. Nếu có bất kỳ ký tự nào có mã hóa không xác định, chúng tôi có thể xử lý ký tự đó thông qua đối số lỗi trong quá trình khởi tạo. Đối với người dùng Windows, có một tùy chọn sửa đổi phông chữ trong dấu nhắc lệnh để hiển thị đúng văn bản Unicode. Cuối cùng, chúng tôi đã học cách mở tệp trước khi sử dụng mô-đun pandas để đọc bất kỳ tập dữ liệu nào. cám ơn vì đã đọc và chúc một ngày tốt lành Python xử lý Unicode như thế nào?Kiểu chuỗi của Python sử dụng Tiêu chuẩn Unicode để biểu thị các ký tự , cho phép các chương trình Python hoạt động với tất cả các ký tự có thể khác nhau này.
Có thể UTFUTF-8 mở rộng bộ ký tự ASCII để sử dụng các điểm mã 8 bit, cho phép tối đa 256 ký tự khác nhau. Điều này có nghĩa là UTF-8 có thể đại diện cho tất cả các ký tự ASCII có thể in được, cũng như các ký tự không in được . |