Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menentukan Pengekodan Fail Teks Secara Pengaturcaraan dengan Ketepatan?

Bagaimanakah Saya Boleh Menentukan Pengekodan Fail Teks Secara Pengaturcaraan dengan Ketepatan?

Mary-Kate Olsen
Lepaskan: 2025-01-17 01:51:09
asal
347 orang telah melayarinya

How Can I Programmatically Determine a Text File's Encoding with Precision?

Kenal pasti pengekodan fail teks dengan tepat

Menentukan pengekodan fail teks boleh menjadi rumit, terutamanya jika anda tidak biasa dengan konsep pengekodan. Artikel ini akan memperkenalkan kaedah yang boleh dipercayai dengan ketepatan yang setanding dengan Notepad.

Peranan Byte Order Mark (BOM)

Byte Order Mark (BOM) Urutan bait yang terletak pada permulaan fail teks yang menunjukkan cara fail dikodkan. Butirannya adalah seperti berikut:

  • UTF-7: 2b 2f 76
  • UTF-8: ef bb bf
  • UTF-32 (LE): ff fe 00 00
  • UTF-16 (LE): dan seterusnya
  • UTF-16 (BE): fe ff
  • UTF-32 (BE): 00 00 fe ff

Contoh Kod

Terjemahkan pengetahuan di atas kepada kod:

<code class="language-csharp">/// <summary>
/// 通过分析字节顺序标记 (BOM) 来确定文本文件的编码方式。
/// 如果无法检测文本文件的字节序,则默认为 ASCII。
/// </summary>
/// <param name="filename">要分析的文本文件。</param>
/// <returns>检测到的编码。</returns>
public static Encoding GetEncoding(string filename)
{
    // 读取 BOM
    var bom = new byte[4];
    using (var file = new FileStream(filename, FileMode.Open, FileAccess.Read))
    {
        file.Read(bom, 0, 4);
    }

    // 分析 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

    // 如果编码检测失败,则默认为 ASCII
    return Encoding.ASCII;
}</code>
Salin selepas log masuk

Dengan alatan ini, anda kini boleh menentukan pengekodan mana-mana fail teks dengan keyakinan profesional.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menentukan Pengekodan Fail Teks Secara Pengaturcaraan dengan Ketepatan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan