[解決済み] ファイルのエンコードを検索する効率的な方法
2022-05-11 04:18:09
質問
よくある質問なのですが、私自身あまり知識がないため漠然としています。
しかし、私はファイルのエンコードを見つけるために非常に正確な方法が必要です。 Notepad++がそうであるように、とても正確です。
どのように解決するのですか?
その
StreamReader.CurrentEncoding
プロパティは、私にとって正しいテキストファイルのエンコーディングを返すことはほとんどありません。私は、ファイルのエンディアンを決定するために、そのバイトオーダーマーク(BOM)を分析することで、より大きな成功を収めました。ファイルにBOMがない場合、ファイルのエンコーディングは決定できません。
*UTF-32LEを検出し、UTF-32BEに対して正しいエンコーディングを返すようにUPDATED 4/08/2020 を含む。
/// <summary>
/// Determines a text file's encoding by analyzing its byte order mark (BOM).
/// Defaults to ASCII when detection of the text file's endianness fails.
/// </summary>
/// <param name="filename">The text file to analyze.</param>
/// <returns>The detected encoding.</returns>
public static Encoding GetEncoding(string filename)
{
// Read the BOM
var bom = new byte[4];
using (var file = new FileStream(filename, FileMode.Open, FileAccess.Read))
{
file.Read(bom, 0, 4);
}
// Analyze the BOM
if (bom[0] == 0x2b && bom[1] == 0x2f && bom[2] == 0x76) return Encoding.UTF7;
if (bom[0] == 0xef && bom[1] == 0xbb && bom[2] == 0xbf) return Encoding.UTF8;
if (bom[0] == 0xff && bom[1] == 0xfe && bom[2] == 0 && bom[3] == 0) return Encoding.UTF32; //UTF-32LE
if (bom[0] == 0xff && bom[1] == 0xfe) return Encoding.Unicode; //UTF-16LE
if (bom[0] == 0xfe && bom[1] == 0xff) return Encoding.BigEndianUnicode; //UTF-16BE
if (bom[0] == 0 && bom[1] == 0 && bom[2] == 0xfe && bom[3] == 0xff) return new UTF32Encoding(true, true); //UTF-32BE
// We actually have no idea what the encoding is if we reach this point, so
// you may wish to return null instead of defaulting to ASCII
return Encoding.ASCII;
}
関連
-
[解決済み】「The breakpoint will not currently be hit」を改善するには?このドキュメントにはシンボルが読み込まれていません。" という警告はどうすれば改善されますか?
-
[解決済み】2つ(またはそれ以上)のリストを1つに統合する(C# .NETで
-
[解決済み] C#で文字列のエンコーディングを手動で指定せずに、一貫性のあるバイト表現を得るには?
-
[解決済み] IDisposable インターフェースの正しい使用法
-
[解決済み] C#がforeachで変数を再利用するのは理由があるのか?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] .NETでC#オブジェクトをJSON文字列に変換するには?
-
[解決済み] ファイルが使用中であるかどうかを確認する方法はありますか?
-
[解決済み】大文字・小文字を区別しない「Contains(string)
-
[解決済み】文字列の中にある文字列(実際はchar)の出現回数を数えるには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】プログラム実行中に1秒待つ
-
[解決済み】C#におけるtypedefの等価性
-
[解決済み】パディングが無効で、削除できない?
-
[解決済み】バックスラッシュを含むパス文字列のエスケープシーケンスが認識されない件
-
[解決済み] 'IEnumerable<SelectListItem>' 型の ViewData アイテムで、キーが国であるものは存在しない。
-
[解決済み】Visual Studio: 操作を完了できませんでした。パラメータが正しくありません
-
[解決済み] 2つのリストを結合する
-
[解決済み】Microsoft.Extensions.LoggingからILoggerを解決することができない
-
[解決済み】WebResource.axdとは何ですか?
-
[解決済み】Windowsでファイルのエンコードを取得する