Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menentukan Pengekodan Fail dengan Tepat dalam C#?

Bagaimanakah Saya Boleh Menentukan Pengekodan Fail dengan Tepat dalam C#?

Linda Hamilton
Linda Hamiltonasal
2025-01-17 01:41:08210semak imbas

How Can I Accurately Determine a File's Encoding in C#?

Mengenal pasti Pengekodan Fail dengan Tepat dalam C#

Menentukan pengekodan fail dengan tepat adalah penting untuk pemprosesan data yang betul. Walaupun StreamReader.CurrentEncoding kadangkala gagal, kaedah yang lebih mantap melibatkan analisis Byte Order Mark (BOM). Pendekatan ini, sama seperti yang digunakan dalam Notepad , memberikan ketepatan yang lebih tinggi.

Memanfaatkan Tanda Pesanan Byte (BOM)

Kehadiran BOM dengan ketara membantu pengekodan pengenalan. Nilai BOM berikut sepadan dengan pengekodan khusus:

  • UTF-7: 0x2b, 0x2f, 0x76
  • UTF-8: 0xef, 0xbb, 0xbf
  • UTF-32LE: 0xff, 0xfe, 0x00, 0x00
  • UTF-16LE: 0xff, 0xfe
  • UTF-16BE: 0xfe, 0xff
  • UTF-32BE: 0x00, 0x00, 0xfe, 0xff

Jika tiada BOM dikesan, kod lalai kepada ASCII untuk mengelakkan ralat.

Pelaksanaan Kod C# untuk Analisis BOM

Kod C# berikut menunjukkan pengesanan pengekodan berasaskan BOM ini:

<code class="language-csharp">public static Encoding GetEncoding(string filename)
{
    byte[] bom = new byte[4];
    using (FileStream file = new FileStream(filename, FileMode.Open, FileAccess.Read))
    {
        file.Read(bom, 0, 4);
    }

    // BOM analysis logic (see complete implementation below)

    return Encoding.ASCII; // Default to ASCII if no BOM is found
}</code>

Fungsi ini membaca bait awal fail dengan cekap dan menggunakannya untuk menentukan pengekodan. Pelaksanaan lengkap analisis BOM kemudiannya akan menyusul, mengendalikan setiap kes BOM secara individu untuk mengembalikan objek Encoding yang sesuai. Ini memastikan pengesanan pengekodan yang boleh dipercayai merentas pelbagai format fail teks.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menentukan Pengekodan Fail dengan Tepat dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn