ホームページ >バックエンド開発 >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 (バイト オーダー マーク): 多くの Unicode エンコードでは、ファイルの先頭にエンコードを示す 3 バイトまたは 4 バイトの署名が含まれています。たとえば、UTF-8 では 0xEFBBBF が使用されます。
  2. 検出/ヒューリスティック チェック: 文字列の最初の数バイトをチェックすることで、エンコーディングの検出を試みることができます。たとえば、UTF-8 は、特定の上位ビットが設定されたバイト パターンを持つ傾向があります。
  3. ファイル内のメタデータ: 一部のファイルには、コンテンツまたはメタデータにエンコード情報が埋め込まれています。 「charset=xyz」や「encoding=xyz」などのテキスト内のパターンを検索します。

ソリューションの概要

提供されるコードは、BOM 検出から始まる文字列のエンコードを決定するために 3 つの方法をすべて組み合わせています。 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# 文字列テキスト。 エンコーディング encoding = detectTextEncoding("my_file.txt", out text); Console.WriteLine("検出されたエンコーディング: " encoding.EncodingName); Console.WriteLine("デコードされたテキスト: " text); 「」

要約すると、このコードは、BOM とヒューリスティック チェックを利用して正確な検出を保証し、C# で文字列のエンコードを決定する強力な方法を提供します。

以上がC# で文字列のエンコーディングを効率的に検出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。