質問

ソースファイルにファイルヘッダーが含まれているかどうかをチェックするTFSチェックインポリシーを作成しています。

私の問題は、ファイルヘッダーに特殊文字"©"が含まれていることです。残念ながら、ソースファイルの一部はANSIでエンコードされています。 したがって、ポリシーでこれらのファイルを読み取ると、文字列は次のようになります" Copyright� 2009"。

string content = File.ReadAllText(pendingChange.LocalItem);

文字列のエンコードを変更するのはうんざりしましたが、役に立ちません。正しい文字列" Copyright©を取得するには、どうすればこれらのファイルを読み取ることができますか2009"?

ご協力ありがとうございます!

Enyについて

役に立ちましたか?

解決

Encoding.Default を使用:

string content = File.ReadAllText(pendingChange.LocalItem, Encoding.Default);

ただし、システムのデフォルトのエンコーディングを使用してファイルを読み取ることに注意してください。ファイルのエンコーディングとは異なる場合があります。 ANSIと呼ばれる単一のエンコードはありませんが、人々が「ANSIエンコード」について話すときは、通常 Windowsコードページ1252またはそのボックスが使用するものを意味します。

使用されている exact エンコーディングを確認できれば、コードはより堅牢になります。

他のヒント

標準エンコーディングをチームに同意してもらうようなポリシーを設定するのが賢明なようです。正直なところ、どのチームが「Unicode(UtF-8 with signature)-Codepage 65001」以外のエンコーディングを使用するのかわかりません。 (おそらく、非ラテンの重要な静的コンテンツを含むASPXページを除きますが、それでもUTF-8を使用するのが大したことになるのかわかりません。)

混合エンコーディングを引き続き許可する場合、次にファイルが保存されたエンコーディングを判別して、 ReadAllText に渡すエンコーディングを確認する方法が必要です。ファイルからこれを判断するのは簡単ではありませんが、 Encoding.Default を使用することで問題なく動作する可能性があります。ほとんどの場合、VS(署名付きUTF-8)と、マシン(おそらくWindows-1252)で使用される一般的なANSIエンコーディングの2つのエンコーディングのみを処理する必要があります。

したがって、使用

 string content = File.ReadAllText(pendingChange.LocalItem, Encoding.Default);

は機能します。 (私が見るように、ジョンはすでに投稿しています)。これは、ファイルの先頭にUTF-8 BOM(VSが用語「署名」で意味する)が存在する場合、指定されたエンコードパラメーターが無視され、UTF-8が使用されるためです。したがって、UTF-8を使用してファイルを保存した場合は正しい結果が得られ、ANSIを使用した場合は正しい結果が得られる可能性が高くなります。

ところで、ファイルヘッダーを処理している場合は、 ReadAllLines で処理が簡単になりませんか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top