動くコード図鑑技術記事現場の渡り方キャリア論すべての記事About
C#

定石6:エンコーディング判定の実践— Shift-JISとBOM付きUTF-8の見分け

出典: C# ファイルIO の正解 — StreamReader / File.ReadAllLines / File.ReadLines / using の使い分け定石6:エンコーディング判定の実践— Shift-JISとBOM付きUTF-8の見分け

定石6:エンコーディング判定の実践— Shift-JISとBOM付きUTF-8の見分け (csharp)#2c74893d554e
// ✅定石6: BOMの有無で簡易判定(業務系で雑なエンコーディング判定)
public static Encoding DetectEncoding(string path)
{
    var bytes = new byte[4];
    using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read))
    {
        fs.Read(bytes, 0, 4);
    }
 
    // UTF-8 BOM (EF BB BF)
    if (bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF)
        return Encoding.UTF8;
 
    // UTF-16 BOM (FF FE / FE FF)
    if (bytes[0] == 0xFF && bytes[1] == 0xFE)return Encoding.Unicode;
    if (bytes[0] == 0xFE && bytes[1] == 0xFF)return Encoding.BigEndianUnicode;
 
    // BOMなし→業務系の典型はShift-JIS(取引先Excel CSV出力等)
    return Encoding.GetEncoding("shift_jis");
}
 
//使う側
var enc = DetectEncoding(@"C:\input\trade.csv");
foreach (var line in File.ReadLines(path, enc))
{
    ProcessOneRow(line);
}
▸ この snippet は実行結果未収録
▸ 実行結果は未収録です
  • id: #2c74893d554e
  • lines: 27
  • extracted: 2026-06-10

Source収録記事

この snippet は記事の「定石6:エンコーディング判定の実践— Shift-JISとBOM付きUTF-8の見分け」セクションに登場する。コードの前後の文脈・ハマりどころの解説は記事本文で。

同じ記事から

5
図鑑トップ