C# で文字列エンコーディングを決定する信頼性の高い方法
ファイルやファイル名などのソースの文字列を扱うとき、エンコーディングが不明な状況に遭遇することがよくあります。この場合、データを正しく表示および解釈するには、コーディングを正しく決定することが重要です。 C# には、この問題を解決するいくつかの方法が用意されています。
Encoding.DetectEncoding を使用する
Encoding.DetectEncoding
メソッドは、基本的なエンコード検出機能を提供します。バイト パターンの統計分析に基づいてエンコーディングを識別しようとします。ただし、この方法は完全に信頼できるわけではなく、場合によっては失敗する可能性があります。
<code class="language-csharp">Encoding encoding = Encoding.DetectEncoding(bytes);</code>
カスタムエンコード検出
より正確なエンコード検出のために、カスタム実装を作成できます。これらの方法には通常、バイト パターン、BOM (バイト オーダー マーク)、およびその他のヒューリスティックをチェックしてエンコードを決定することが含まれます。以下はカスタム検出方法の例です:
<code class="language-csharp">public static Encoding DetectEncoding(byte[] bytes) { // 检查 UTF-8 BOM if (bytes.Length >= 3 && bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) { return Encoding.UTF8; } // 检查 UTF-16 BOM else if (bytes.Length >= 2 && bytes[0] == 0xFF && bytes[1] == 0xFE) { return Encoding.Unicode; } else if (bytes.Length >= 2 && bytes[0] == 0xFE && bytes[1] == 0xFF) { return Encoding.BigEndianUnicode; } // 检查 UTF-32 BOM else if (bytes.Length >= 4 && bytes[0] == 0x00 && bytes[1] == 0x00 && bytes[2] == 0xFE && bytes[3] == 0xFF) { return Encoding.UTF32; } else if (bytes.Length >= 4 && bytes[0] == 0xFF && bytes[1] == 0xFE && bytes[2] == 0x00 && bytes[3] == 0x00) { return Encoding.UTF32; } // 检查 UTF-7 BOM else if (bytes.Length >= 3 && bytes[0] == 0x2B && bytes[1] == 0x2F && bytes[2] == 0x76) { return Encoding.UTF7; } // 使用默认编码 else { return Encoding.Default; } }</code>
概要
C# で文字列のエンコードを決定するには、組み込みメソッドの制限とカスタム検出メソッドの潜在的な利点を注意深く考慮する必要があります。上記の手法を使用することで、開発者は文字列エンコード検出コードの精度と信頼性を向上させることができます。
以上がC# で文字列のエンコーディングを確実に判断するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。