تشخیص رمزگذاری

تشخیص رمزگذاری

HTML به صورت بایت می‌رسد، و لایه رمزگذاری به اولین سؤال هر خط لوله پاسخ می‌دهد: کدام رمزگذاری و چه متنی؟ تشخیص بر مبنای رویکرد استانداردها انجام می‌شود — نخست علامت‌های ترتیب بایت (BOM)، سپس اعلان‌های داخل محتوا.


تشخیص از بایت‌ها

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() پیش‌اسکن متا بر مبنای استانداردها برای اعلان‌های charset داخل سند را اعمال می‌کند؛ decode_bytes() پس از انتخاب یک رمزگذاری، رمزگشایی را انجام می‌دهد. رمزگذاری‌های پشتیبانی‌نشده، UnsupportedEncodingError تایپ‌شده را برمی‌انگیزند.

نام‌های استاندارد

برچسب‌های رمزگذاری در محیط‌های مختلف متفاوت هستند — latin1، iso-8859-1 و us-ascii همگی به معنای windows-1252 طبق استاندارد رمزگذاری هستند. get_canonical_name() هر برچسب ثبت‌شده‌ای را به نام قراردادی آن نگاشت می‌کند.


نکات و بهترین شیوه‌ها

  • به BOM اعتماد کنید: وقتی موجود باشد، قطعی است و detector اطمینان مشخصی گزارش می‌کند.
  • قبل از مقایسه رمزگذاری‌ها، برچسب‌ها را از طریق 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بازرسی علامت ترتیب بایت
prescan_meta_charsetپیش‌اسکن متا استانداردها
decode_bytesرمزگشایی با یک رمزگذاری انتخابی
get_canonical_nameنرمال‌سازی برچسب رمزگذاری

همچنین ببینید:

 فارسی