> 백엔드 개발 > C++ > BOM(바이트 순서 표시)을 사용하여 파일의 인코딩을 안정적으로 결정하는 방법은 무엇입니까?

BOM(바이트 순서 표시)을 사용하여 파일의 인코딩을 안정적으로 결정하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2025-01-17 01:32:09
원래의
423명이 탐색했습니다.

How to Reliably Determine a File's Encoding Using its Byte Order Mark (BOM)?

파일 인코딩의 정확한 식별: 실용적인 방법

파일 인코딩을 올바르게 식별하는 것은 텍스트 처리에 매우 중요합니다. 그러나 StreamReader.CurrentEncoding 속성은 정확한 결과를 제공하지 않는 경우가 많습니다. 이 문제를 해결하기 위해 보다 안정적인 방법은 파일의 BOM(Byte Order Mark)을 분석하는 것입니다.

BOM의 역할

BOM은 텍스트 파일의 엔디안과 인코딩을 나타내는 일련의 바이트입니다. 일반적인 BOM은 다음과 같습니다.

  • UTF-8: EF BB BF
  • UTF-16LE: FF FE
  • UTF-16BE: FE FF
  • UTF-32LE: FF FE 00 00
  • UTF-32BE: 00 00 FE FF
  • ASCII: BOM 없음

BOM을 기준으로 파일 인코딩 결정

다음 C# 코드는 자세한 구현을 제공합니다.

<code class="language-csharp">public static Encoding GetEncoding(string filename)
{
    // 读取 BOM
    byte[] 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

    // 如果未检测到 BOM,则回退到 ASCII
    return Encoding.ASCII;
}</code>
로그인 후 복사

이 방법을 사용하면 모든 텍스트 파일의 인코딩을 정확하게 식별하여 올바른 데이터 해석과 텍스트 처리를 보장할 수 있습니다.

위 내용은 BOM(바이트 순서 표시)을 사용하여 파일의 인코딩을 안정적으로 결정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿