BOMが存在しない場合、char *バッファにUTF8文字が含まれているかどうかを確認するためのすばやく汚れた方法がありますか?char *バッファにUTF8文字が含まれているかどうかを確認しますか?
答えて
信頼性が低くなります。被験者のRaymond Chenのseriesのpostsを参照してください。
問題は、BOMを持たないUTF-8はすべて、同じように有効なANSIエンコーディングと見分けがたくなることです。私はほとんどのソリューション(win32 API IsTextUnicode
のような)は、テキストのフォーマットを推測するために様々な経験則を使用していると思います。
あなたはそれが可能であるという仮説をテストすることができますが、確信が持てないということを知ることしかできません。つまり、バッファを調べて、すべてのバイトシーケンスが有効なUTF-8であるかどうか、コードポイントが最小バイト数で表されているかどうか、16ビットサロゲートコードが存在しないかどうかなどを調べることができます。これらの基準をすべて満たすバッファはテキストのように見えますが、あなたはだまされる可能性があります。
Mark Pim氏の答えであるOld New ThingのRaymond Chenディスカッションに加えて、バッファには実際には7ビットの印刷可能なASCIIと思われるサブセットに制限されるx86マシンコードが実際に含まれている可能性があります。驚いたことに、実際にそのサブセットに意味のあるプログラムを書くことができます。その一例は、EICARウイルス対策テストウイルスです。
もちろん、不正な形式のUTF-8であるバイト列を含むバッファは、おそらくUTF-8テキストではありません。その場合、あなたは高い信頼度を持っています。次に、実際にどのようなエンコードが行われるかを把握することです。
バッファのセマンティックコンテンツについて何か知っている(または想定している)場合は、それを使用して決定をサポートすることもできます。たとえば、バッファに英語のテキストが含まれていると想定されている場合は、その中に韓国語のコードポイントを持つことはほとんどありません。また、一般的に正しいスペル、英語の文法などに従ってください。これはもちろん、テストには高価になる可能性があります。
素早く汚れている場合は、this pageの正規表現よりもはるかに優れていません。バイトをUTF-8としてデコードするのが安全かどうかを知りたいだけなら、それだけで十分です。
バイトシーケンスがUTF-8として有効であることを単にテストします。そうであれば、それが他の符号化において意味のあるテキストである確率は本質的にゼロである。
- 1. 文字列に文字列が含まれているかどうかを確認してキャンセルしますか?
- 2. charに特定の文字が含まれているかどうかを確認する方法
- 3. 文字列にcharが含まれているかどうかを確認する方法?
- 4. 文字列が文字列に含まれているかどうかを確認しますか?
- 5. 文字列にコンマが含まれているかどうか確認する
- 6. 文字列にintが含まれているかどうかを確認
- 7. 文字列に特殊文字が含まれているかどうかを確認するには?
- 8. 文字列xに文字 "G"が含まれているかどうかを確認するメソッドを書く
- 9. 行に文字/数字が含まれているかどうかを確認しますか?
- 10. 文字列に大文字が含まれているかどうかを確認してください。
- 11. 文字列に文字/数字が含まれているかどうかを確認する
- 12. 文字列に列に文字列が含まれているかどうかを確認する方法MySQL
- 13. searBar.textに整数文字列が含まれているかどうかを確認しますか?
- 14. router.urlに特定の文字列が含まれているかどうかを確認しますか?
- 15. 文字列にPHPの他の文字列が含まれているかどうかを確認する
- 16. 文字列に文字列が含まれているかどうかを確認する
- 17. 文字列に(文字列の)リストの要素が含まれているかどうかを確認する
- 18. 文字列に大文字小文字を区別しない別の文字列が含まれているかどうかを確認できますか?
- 19. 文字列に同じ文字が含まれているかどうかを確認
- 20. 文字列に特定の整数が含まれているかどうかを確認します。
- 21. 文字列に1つ以上のリスト値が含まれているかどうかを確認します。
- 22. PHPファイルに文字列が含まれているかどうかを確認します。
- 23. 文字列にTclの断片が含まれているかどうかを確認します。
- 24. char配列に文字列が含まれていますか?
- 25. 文字列に非ローマ字が含まれているかどうかを確認する方法
- 26. 文字列に数字記号が含まれているかどうかを確認する方法
- 27. 文字列に英数字以外の文字が含まれているかどうかを確認するにはどうすればよいですか?
- 28. IF文を使用して変数に£(pounds)が含まれているかどうかを確認するPHP
- 29. 文字列に何かが含まれているかどうかを確認する方法QWERY/1234
- 30. VB.NET文字列にアルファベット文字と。が含まれているかどうかを確認するにはどうすればいいですか?
BOMの場合、それはまだ区別できません。したがって、BOMは積極的に有害であることに加えて役に立たない。 –