エンコーディング検出
エンコーディング検出
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 | エンコーディングラベルを正規化する |