>백엔드 개발 >C++ >텍스트 파일의 인코딩을 프로그래밍 방식으로 정확하게 결정하려면 어떻게 해야 합니까?

텍스트 파일의 인코딩을 프로그래밍 방식으로 정확하게 결정하려면 어떻게 해야 합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-17 01:51:09350검색

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

텍스트 파일 인코딩을 정확하게 식별

텍스트 파일의 인코딩을 결정하는 것은 까다로울 수 있으며, 특히 인코딩 개념에 익숙하지 않은 경우 더욱 그렇습니다. 이 기사에서는 메모장에 필적하는 정확도를 갖춘 신뢰할 수 있는 방법을 소개합니다.

BOM(Byte Order Mark)의 역할

바이트 순서 표시(BOM) 파일이 인코딩되는 방식을 나타내는 텍스트 파일의 시작 부분에 있는 일련의 바이트입니다. 세부 내용은 다음과 같습니다.

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

코드 예시

위 지식을 코드로 변환:

<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>

이제 이러한 도구를 사용하면 전문가의 확신을 가지고 모든 텍스트 파일의 인코딩을 결정할 수 있습니다.

위 내용은 텍스트 파일의 인코딩을 프로그래밍 방식으로 정확하게 결정하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.