また、 HEBCI: HTML Entity-Based Codepage Inferenceテクニックを使用することもできます.
本質的には、これがどのように機能するかです:
すべてのコードページには独自のフィンガープリントがあります。たとえば、単一のエンティティ「º」ISO-8859-1/Windows-1252 (=BA)、MacRoman(=BC)、および UTF-8 (=C2BA) を区別するために使用できます。
フォームでは、これらのフィンガープリントをエンティティ (°、÷、— など) として含む非表示の入力を追加するだけで、ユーザーがフォームを送信するときに、返された 16 進値をチェックしてフィンガープリント テーブルと比較するだけです。 . これで一致しない場合は、他のフォールバック ソリューションを続行してください。
少し大きな実装は、5 つのコードポイントのみでうまく機能します。
my @fp_ents = qw/deg divide mdash bdquo euro/;
my %fingerprints = (
"UTF-8" => ['c2b0','c3b7','e28094','e2809e','e282ac'],
"WINDOWS-1252" => ['b0','f7','97','84','80'],
"MAC" => ['a1','d6','d1','e3','db'],
"MS-HEBR" => ['b0','ba','97','84','80'],
"MAC-CYRILLIC" => ['a1','d6','d1','d7',''],
"MS-GREEK" => ['b0','','97','84','80'],
"MAC-IS" => ['a1','d6','d0','e3',''],
"MS-CYRL" => ['b0','','97','84','88'],
"MS932" => ['818b','8180','815c','',''],
"WINDOWS-31J" => ['818b','8180','815c','',''],
"WINDOWS-936" => ['a1e3','a1c2','a1aa','',''],
"MS_KANJI" => ['818b','8180','','',''],
"ISO-8859-15" => ['b0','f7','','','a4'],
"ISO-8859-1" => ['b0','f7','','',''],
"CSIBM864" => ['80','dd','','',''],
);