Phát hiện mã hoá
Phát hiện mã hoá
HTML xuất hiện dưới dạng byte, và lớp mã hoá trả lời câu hỏi đầu tiên của bất kỳ pipeline nào: mã hoá nào, và văn bản gì? Phát hiện tuân theo cách tiếp cận tiêu chuẩn — byte-order marks trước, rồi các khai báo trong nội dung.
Phát hiện từ byte
detect_encoding() quét một luồng byte và trả về một EncodingDetectionResult chứa mã hoá đã phát hiện, mức độ tin cậy và văn bản đã giải mã. Một UTF-8 BOM được phát hiện một cách chắc chắn, và các byte BOM được loại bỏ khỏi đầu ra đã giải mã:
from aspose_html.encoding.detection import detect_encoding
result = detect_encoding(b"\xef\xbb\xbf<p>x</p>")
print(result.encoding)
print(result.confidence)
print(result.text)Bộ công cụ Phát hiện
sniff_bom() chỉ kiểm tra các dấu byte-order; prescan_meta_charset() áp dụng quá trình quét meta tiêu chuẩn cho các khai báo charset trong tài liệu; decode_bytes() thực hiện giải mã khi đã chọn mã hoá. Các mã hoá không được hỗ trợ sẽ gây ra lỗi kiểu UnsupportedEncodingError.
Tên chuẩn
Các nhãn mã hoá thay đổi trong môi trường thực — latin1, iso-8859-1, và us-ascii đều có nghĩa là windows-1252 theo tiêu chuẩn mã hoá. get_canonical_name() ánh xạ bất kỳ nhãn đã đăng ký nào tới tên chuẩn của nó.
Mẹo và Thực hành Tốt nhất
- Tin tưởng vào BOM: khi có, nó là quyết định cuối cùng và bộ phát hiện báo cáo mức độ chắc chắn nhất định.
- Chuẩn hoá các nhãn qua
get_canonical_name()trước khi so sánh các mã hoá. - Sử dụng
result.texttừ quá trình phát hiện thay vì tự giải mã lại các byte.
Các vấn đề phổ biến
| Vấn đề | Nguyên nhân | Khắc phục |
|---|---|---|
| BOM xuất hiện trong văn bản đã giải mã | Giải mã thủ công thay vì detect_encoding() | Quá trình phát hiện loại bỏ các byte BOM khỏi result.text |
| So sánh nhãn thất bại | Tên bí danh và tên chuẩn không khớp | Chuẩn hoá với get_canonical_name() |
UnsupportedEncodingError đã được kích hoạt | Mã hoá đầu vào nằm ngoài danh sách đăng ký | Xử lý lỗi đã gõ; mã hoá lại ở phía trên |
FAQ
Phát hiện trả về gì?
Một EncodingDetectionResult với encoding, confidence, và text đã được giải mã.
Các nhãn legacy có được xử lý không?
Có — bảng bí danh ánh xạ các nhãn như latin1 và us-ascii tới các mã hoá chuẩn của chúng.
Phát hiện có đọc các thẻ meta không?
prescan_meta_charset() thực thi tiêu chuẩn meta-prescan và tham gia vào quá trình phát hiện.
API Reference Tóm tắt
| Lớp/Phương thức | Mô tả |
|---|---|
detect_encoding | Phát hiện mã hoá và giải mã byte |
EncodingDetectionResult | Đối tượng kết quả phát hiện |
sniff_bom | Kiểm tra Byte-order-mark |
prescan_meta_charset | Tiêu chuẩn meta-prescan |
decode_bytes | Giải mã bằng bộ mã được chọn |
get_canonical_name | Chuẩn hoá một nhãn mã hoá |