การตรวจจับการเข้ารหัส

การตรวจจับการเข้ารหัส

การตรวจจับการเข้ารหัส

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ทำให้ป้ายกำกับการเข้ารหัสเป็นมาตรฐาน

ดูเพิ่มเติม

 ภาษาไทย