>백엔드 개발 >C++ >C#에서 문자열 인코딩을 효율적으로 감지하려면 어떻게 해야 합니까?

C#에서 문자열 인코딩을 효율적으로 감지하려면 어떻게 해야 합니까?

Susan Sarandon
Susan Sarandon원래의
2025-01-20 19:13:10860검색

How Can I Efficiently Detect a String's Encoding in C#?

C#에서 문자열 인코딩을 효율적으로 감지

다양한 소스의 텍스트 데이터를 처리하려면 문자열 인코딩을 정확하게 결정하는 것이 중요합니다. 이 문서에서는 C#에서 이를 효율적으로 달성하는 방법을 살펴보겠습니다.

코딩 단서

명시적으로 명시하지 않고 문자열의 인코딩을 결정하는 방법에는 여러 가지가 있습니다.

  1. BOM(바이트 순서 표시): 많은 유니코드 인코딩에는 인코딩을 나타내기 위해 파일 시작 부분에 3바이트 또는 4바이트 서명이 포함되어 있습니다. 예를 들어 UTF-8은 0xEFBBBF를 사용합니다.
  2. 감지/경험적 검사: 문자열의 처음 몇 바이트를 확인하여 인코딩 감지를 시도할 수 있습니다. 예를 들어, UTF-8은 특정 상위 비트가 설정된 바이트 패턴을 갖는 경향이 있습니다.
  3. 파일의 메타데이터: 일부 파일에는 콘텐츠나 메타데이터에 인코딩 정보가 포함되어 있습니다. "charset=xyz" 또는 "encoding=xyz"와 같은 텍스트에서 패턴을 찾습니다.

솔루션 개요

제공된 코드는 BOM 감지부터 시작하여 문자열 인코딩을 결정하는 세 가지 방법을 모두 결합합니다. BOM을 찾을 수 없는 경우 코드는 감지기를 사용하여 UTF-8 및 UTF-16과 같은 일반적인 인코딩을 경험적으로 식별합니다. 마지막으로, 적합한 인코딩이 발견되지 않으면 시스템의 기본 코드 페이지로 대체됩니다.

이 코드는 인코딩을 감지할 뿐만 아니라 디코딩된 텍스트를 반환하여 필요한 정보를 완전히 제공합니다.

코드 구현

다음 C# 코드는 이 솔루션을 구현합니다.

<code class="language-c#">public Encoding detectTextEncoding(string filename, out String text, int taster = 1000)
{
    // 检查BOM
    // 为简洁起见省略

    // 基于探测器的编码检测
    bool utf8 = false;
    int i = 0;
    while (i < taster) {
        // 省略具体实现细节
    }

    // ... (其余代码省略)
}</code>

사용법

이 코드를 사용하려면 파일 경로를 문자열로 제공하고 감지된 인코딩 및 디코딩된 텍스트를 출력 매개변수로 검색합니다. 예는 다음과 같습니다.

``c# 문자열 텍스트; 인코딩 인코딩 = discoverTextEncoding("my_file.txt", out text); Console.WriteLine("감지된 인코딩: " 인코딩.EncodingName); Console.WriteLine("디코딩된 텍스트: " text); ````

요약하자면, 이 코드는 정확한 감지를 보장하기 위해 BOM 및 휴리스틱 검사를 활용하여 C#에서 문자열 인코딩을 결정하는 강력한 방법을 제공합니다.

위 내용은 C#에서 문자열 인코딩을 효율적으로 감지하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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