エンコーディング検出

エンコーディング検出

エンコーディング検出

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() の代わりに手動デコード検出が result.text から BOM バイトを削除
ラベル比較が失敗エイリアスと正規名の不一致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エンコーディングラベルを正規化する

参照

 日本語