2011-10-20 11 views
2

文字配列(char*)のマルチバイト文字エンコーディング(UTF-8、UTF-16など)を検出するためのC/C++ライブラリはありますか。マッチャが停止したとき、つまりという接頭辞の可能なエンコーディングのセットの一致範囲を検出すると、ボーナスも検出されます。マルチバイト文字エンコーディングの検出

+1

ASCIIはありませんが、UTF-8のみがあります:-) – paxdiablo

答えて

5

ICUはcharacter set detectionです。

これは、統計と ヒューリスティックを使用した不正確な操作であることに注意してください。このため、ほとんど 言語にある文字データのうち、少なくとも数百バイトの文字を で提供すると、検出が最も効果的です。

+0

nice - 私はそれを知らなかった。しかし、私が言ったように、それはヒューリスティックでなければならない。 +1 –

2

入力がASCIIのみの場合、ストリームに上位ビットセットのバイトがあった場合に、何を処理するべきかを検出する方法がありません。その場合はUTF-8を選んでください。

UTF-8とISO-8859-xの違いは、入力をUTF-8として解析し、解析が失敗した場合はISO-8859にフォールバックすることができます。実際にを検出する方法はありません。 ISO-8859の亜種があります。私はFirefoxが自動検出しようとする方法を見てみることをお勧めしますが、それは絶対確実ではなく、おそらく入力がHTMLであることにかかっています。

1

一般に、テキストにエンコーディングを示す特別なマークがある場合を除いて、文字エンコーディングを検出する可能性はありません。一部のエンコーディングにのみ存在する文字を含む単語を含む辞書を使用して、ヒューリスティックにエンコーディングを検出できます。

これはもちろんヒューリスティックに過ぎず、テキスト全体をスキャンする必要があります。

例: "英語のテキストは複数のエンコードで書くことができます"。この文は、例えばドイツ語のコードページを使用して書くことができる。 ASCIIには存在しない特殊文字(äなど)を追加しない限り、ほとんどの "西洋"エンコーディング(UTF-8を含む)と区別できません。

関連する問題