2

半年前、私は厄介な問題に直面しました。そして、それでもそれを修正することができませんでした。問題はlog4j-loggingにあり、デフォルトの文字セットはutf8です。

時々私は異なるエンコーディング、CP1252でメッセージを受信します。(これを変更する方法はありません)。したがって、utf8にログインすると、テキストが読み取れなくなります。なんとかしてエンコーディングを修正することができ、このテキストはログで読み取ることができます。

しかし、その「エンコーディング修正」を通常のメッセージに適用すると、混乱します。その変換が本当に必要かどうかを知る必要があります。残念ながら、私には考えがありません。

4

2 に答える 2

3

decezeがコメントしたように、テキストのエンコーディングを自動的に検出する信頼できる方法はありません。

ほとんどのエンコーディングは文字に1バイトを使用しようとします。その結果、同じバイトシーケンスは、異なるエンコーディングではまったく異なる文字列を意味します。確実に実行できる唯一のことは、「UTF8文字列は無効です」と言うことです。他の頻繁に使用されるエンコーディングには、どのバイトシーケンスが有効であるか/無効であるかについての厳密な規則さえありません。

最善のオプションは、メッセージのエンコーディングを知ることです。次のオプションは、「utf8文字列」の横にあるバイト配列としてテキストを保持することです。

受け入れるエンコーディングのセットが非常に限られている場合(utf8 / utf16 / cp1252)、いくつかのヒューリスティックを使用して検出を試みることができます-つまり、UTF16のほとんどの英語の文字列は1バイトおきに0になり、文字列はUTF8としては問題ありませんが、そうでない場合は、残りのエンコーディングである可能性があります。

于 2012-03-30T01:44:29.987 に答える
1

Apache Tikaには、オープンソースのエンコーディング検出器が含まれています。

商用の代替品もあります。

于 2012-03-30T01:48:41.333 に答える