تشخیص رمزگذاری
تشخیص رمزگذاری
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 | نرمالسازی برچسب رمزگذاری |