2012-02-04 9 views
3

私は、分かりにくい文字を含むテキストを表示しています。これは、¤またはorと表示されます。私はテキストがどんな文字セットであったか分からない。それを理解する簡単な方法はありますか?いくつかのオンラインの文字セット検出器や多分charset変換プレビューアがあればいいですか?私はいくつかの特定の発音区別文字がどのようにすべての利用可能なエンコーディングで不正なように見えるかを示すアプリケーションについて考えます。そうすれば、テキストにある文字に適合する文字を追跡することができます。テキストの文字セットを検出する方法は?

アイデア? Windows PowerShellので

+1

C#またはPHPである必要はありますか? – Joey

+0

C#、PHP、またはWindowsやWebサイトのツールで実行できるアプリケーションにすることができます。 –

+0

どこからテキストを取得していますか?ディスク上のファイルですか? – Douglas

答えて

4

$bytes = [IO.File]::ReadAllBytes('some file.txt') 
[Text.Encoding]::GetEncodings() | 
    %{ 
    $_|Add-Member -pass Noteproperty Text ($_.GetEncoding().GetString($bytes)) 
    } | fl Name,Codepage,Text 

は、ファイルへのパスを調整し、あなたが知られているすべてのエンコーディングを通じて;-)

これだけで繰り返し処理を正しく見えるものが表示されるまでの結果を参照します。 NETを使用して、それぞれのエンコーディングを使用してテキストを文字列に変換します。 C#の

1

textBox1が大きいマルチ TextBox(または任意の他の適切な制御)である
foreach (EncodingInfo encodingInfo in Encoding.GetEncodings()) 
    using (FileStream fileStream = File.OpenRead(filePath)) 
    using (StreamReader reader = new StreamReader(fileStream, encodingInfo.GetEncoding(), false)) 
     textBox1.Text += encodingInfo.DisplayName + ":\t " + reader.ReadToEnd() + "\r\n"; 

私が学んだいくつかの注意点:

  1. コンソールアプリケーションは、デフォルトでUnicodeをサポートしていません。
  2. File.ReadAllText別のエンコーディングが明示的に指定されている場合でも、バイトオーダーマークの存在に基づいてファイルのエンコードを自動的に検出しようとします。これを抑制する唯一の方法は、StreamReaderコンストラクタのオーバーロードによって、バイトオーダーマークの検索を抑制することができます。
+0

とこれをクリップボードから行う方法は? –

+0

ファイルベースのアプローチ(_original_ファイルを使用)を使用することをお勧めします。誤ったエンコーディングが使用された場合、デコードは損失の多い操作です。 – Douglas

関連する問題