การตรวจจับการเข้ารหัส
การตรวจจับการเข้ารหัส
HTML มาในรูปแบบไบต์, และชั้นการเข้ารหัสตอบคำถามแรกของทุกรายการทำงาน: การเข้ารหัสใด, และข้อความอะไร? การตรวจจับทำตามแนวทางมาตรฐาน — ตรวจสอบเครื่องหมายลำดับไบต์ก่อน, แล้วตามด้วยการประกาศภายในเนื้อหา.
การตรวจจับจากไบต์
detect_encoding() ตรวจจับสตรีมไบต์และคืนค่า EncodingDetectionResult ที่บรรจุการเข้ารหัสที่ตรวจพบ, ระดับความมั่นใจ, และข้อความที่ถอดรหัสแล้ว. UTF-8 BOM ตรวจจับได้อย่างแน่นอน, และไบต์ของ BOM จะถูกลบออกจากผลลัพธ์ที่ถอดรหัส:
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)ชุดเครื่องมือการตรวจจับ
sniff_bom() ตรวจสอบเครื่องหมายลำดับไบต์เพียงอย่างเดียว; prescan_meta_charset() ใช้การสแกนล่วงหน้ามาตรฐานสำหรับการประกาศชุดอักขระภายในเอกสาร; decode_bytes() ทำการถอดรหัสเมื่อเลือกการเข้ารหัสแล้ว. การเข้ารหัสที่ไม่รองรับจะทำให้เกิด UnsupportedEncodingError ที่ระบุประเภท.
ชื่อแบบมาตรฐาน
ป้ายกำกับการเข้ารหัสมีความหลากหลายในสภาพแวดล้อมต่าง ๆ — latin1, iso-8859-1 และ us-ascii ทั้งหมดหมายถึง windows-1252 ตามมาตรฐานการเข้ารหัส get_canonical_name() ทำการแมปป้ายกำกับที่ลงทะเบียนใด ๆ ไปยังชื่อแบบมาตรฐานของมัน.
เคล็ดลับและแนวทางปฏิบัติที่ดีที่สุด
- เชื่อมั่นใน BOM: เมื่อมีอยู่ มันเป็นการยืนยันที่แน่นอนและตัวตรวจจับจะรายงานความมั่นใจที่ชัดเจน
- ทำให้ป้ายกำกับเป็นมาตรฐานผ่าน
get_canonical_name()ก่อนเปรียบเทียบการเข้ารหัส - ใช้
result.textจากการตรวจจับแทนการถอดรหัสไบต์ใหม่ด้วยตนเอง
ปัญหาที่พบบ่อย
| ปัญหา | สาเหตุ | แก้ไข |
|---|---|---|
| BOM ปรากฏในข้อความที่ถอดรหัส | ถอดรหัสด้วยตนเองแทน detect_encoding() | การตรวจจับลบไบต์ BOM จาก result.text |
| การเปรียบเทียบป้ายล้มเหลว | ความไม่ตรงกันระหว่างนามแฝงและชื่อที่เป็นมาตรฐาน | ทำให้เป็นมาตรฐานด้วย get_canonical_name() |
เกิด UnsupportedEncodingError | การเข้ารหัสอินพุตอยู่นอกทะเบียน | จัดการข้อผิดพลาดที่พิมพ์; ทำการเข้ารหัสใหม่ที่ต้นทาง |
FAQ
การตรวจจับจะคืนค่าอะไร?
หนึ่ง EncodingDetectionResult ที่มี encoding, confidence และ text ที่ถอดรหัสแล้ว.
ป้ายกำกับรุ่นเก่าได้รับการจัดการหรือไม่?
ใช่ — ตารางนามแฝงจะจับคู่ป้ายกำกับเช่น latin1 และ us-ascii กับการเข้ารหัสมาตรฐานของพวกมัน.
การตรวจจับอ่านเมตาแท็กหรือไม่?
prescan_meta_charset() ใช้มาตรฐาน meta-prescan และมีส่วนร่วมในการตรวจจับ.
API Reference สรุป
| คลาส/เมธอด | คำอธิบาย |
|---|---|
detect_encoding | ตรวจจับการเข้ารหัสและถอดรหัสไบต์ |
EncodingDetectionResult | อ็อบเจ็กต์ผลลัพธ์การตรวจจับ |
sniff_bom | การตรวจสอบ Byte-order-mark |
prescan_meta_charset | เมตา-พรีสแกนมาตรฐาน |
decode_bytes | ถอดรหัสโดยใช้การเข้ารหัสที่เลือก |
get_canonical_name | ทำให้ป้ายกำกับการเข้ารหัสเป็นมาตรฐาน |