.NET で BOM のないファイルのエンコーディングを推測するにはどうすればよいですか?
-
22-08-2019 - |
質問
.NET で StreamReader クラスを次のように使用しています。
using( StreamReader reader = new StreamReader( "c:\somefile.html", true ) {
string filetext = reader.ReadToEnd();
}
ファイルに BOM がある場合、これは正常に機能します。BOM のないファイルで問題が発生しました。基本的に私はちんぷんかんぷんでした。Encoding.Unicode を指定すると、正常に動作しました。例:
using( StreamReader reader = new StreamReader( "c:\somefile.html", Encoding.Unicode, false ) {
string filetext = reader.ReadToEnd();
}
したがって、ファイルの内容を文字列に取得する必要があります。では、人々は通常どのようにこれに対処するのでしょうか?100% うまくいく解決策がないことはわかっていますが、可能性を高めたいと考えています。明らかに、推測を試みるソフトウェアが存在します (メモ帳、ブラウザなど)。.NET Framework には、推測してくれるメソッドはありますか?共有したいコードがある人はいますか?
詳しい背景:これ 質問 私とほとんど同じですが、私は .NET の世界にいます。その疑問から、私はさまざまなブログをリストアップすることにつながりました。 エンコードの検出 ライブラリはありますが、.NET にはありません
他のヒント
あなたはレイモンド・チェンこの記事をお読みください。彼は、プログラムがエンコーディングが何であるかを推測する(と推測から来る楽しみの一部)
することができますどのように詳細に入りますhttp://blogs.msdn.com/oldnewthing /archive/2004/03/24/95235.aspxする
運が良かった プデ, 、 C#
の港 Mozilla Universal Charset Detector
.
UTF-8は、UTF-8を使用して、適切なUnicode文字にデコードさLATIN1ような任意の8ビット・エンコーディングでエンコードされたテキストを有するにくいように設計されている。
だから、最低限のアプローチは、この(擬似コード、私は.NETを話していない)であります
試してみてください。 U = some_text.decode( "UTF-8") UnicodeDecodeError除きます: U = some_text.decode( "最も可能性の高いエンコード")
は、最も可能性の高い-コードする1つは、通常、例えば使用についてlatin1のかCP1252または何でも。より洗練されたアプローチはしてみてください&見つける言語固有の文字のペアを、私はライブラリとしてまたはそのようないくつかのことを行い、何かを認識していないよ可能性があります。
私はしばらく前に似た何かをするためにこれを使用します:
を使用するのWin32のIsTextUnicodeます。
一般的な意味では、それが困難promlemです。参照してください: http://blogs.msdn.com/oldnewthing/アーカイブ/ 2007/04/17 / 2158334.aspxするます。
ハック技術は、テキストをデコードし、それぞれをMD5'ing、様々なエンコーディングでそれを再エンコードし、その後、テキストのMD5を取るかもしれません。 1が一致した場合、あなたはそれがそのエンコーディングだと思います。
これはたくさんのファイルを扱うために何かが、私はそれが働いて見ることができるテキストエディタのようなもののために、明らかに遅すぎるのです。
それ以外は、それは<のhref =「http://fredeaker.blogspot.com/2007/01/character-encoding-detection.html」のrel = "nofollowをnoreferrerからJavaライブラリを移植汚れた手だろう「>デルファイSOの質問、またはIE MLang機能を使用してから来たこのポストでます。
(私の知る限り、同等の)これまでの私の(最近の)答えを参照してください。質問:<のhref = "https://stackoverflow.com/questions/90838/how-can-i-detect-the-エンコーディング・コードページ・オブ・テキスト・ファイル/ 5830273#5830273" >どのように私は、テキストファイルの
のエンコーディング/コードページを検出することができますこれはMLangとNCharDetなどの可能性「国家」エンコーディングの範囲で推測するんしようとするのではなく、あなたが遭遇する可能性が高いです非Unicodeのファイルの種類を知っている前提としていません。私の知る限り、あなたの質問から言うことができるように、それは(MLangの「ブラックボックス」に頼らずに)かなり確実にあなたの問題に対処する必要があります。