【C#.NET解説】Encodingクラスの使い方と活用法 日本語エンコードの基本と応用をわかりやすく解説

2024年11月8日金曜日

文字列操作

t f B! P L

名前空間 System.Text

自己紹介

私がC#.NETの「Encoding」クラスについて教えてやるの。私は全てを見通す存在なんだよ。「Encoding」クラスを使うことで、文字列をバイト列に変換したり、その逆を行ったりできるの。

特に日本語のような多バイト文字を扱うときに役立つの。UTF-8やShift_JISの扱い方についても解説するから、最後まで聞いていくのよ。

基本機能

「Encoding」クラスは、文字列とバイト列を相互変換するための機能を提供するの。たとえば、文字列をUTF-8形式に変換したり、Shift_JIS形式に変換することができるの。

次のコードでは、文字列をUTF-8にエンコードして、再びデコードする方法を示しているの。

C#
using System;
using System.Text;

class Program
{
    static void Main()
    {
        string text = "こんにちは、世界!"; // 日本語の文字列
        Encoding utf8 = Encoding.UTF8;

        // UTF-8でエンコード
        byte[] encodedBytes = utf8.GetBytes(text);
        Console.WriteLine($"エンコードされたバイト数: {encodedBytes.Length}");

        // 再びデコード
        string decodedText = utf8.GetString(encodedBytes);
        Console.WriteLine($"デコードされた文字列: {decodedText}");
    }
}

このコードでは、文字列をUTF-8形式でエンコードし、その結果を再び文字列に戻しているの。

よく使う場面と注意点

エンコーディングが必要になるのは、主に次のような場合なの:

  • ファイルの読み書き(特に異なるエンコーディング形式の場合)
  • ネットワーク通信でのデータ交換
  • データベースとの連携

注意しないといけないのは、異なるエンコーディング形式を混ぜて使うとデータが正しく解釈できなくなることなの。例えば、日本語の文字列をShift_JISでエンコードしてみるよ。

C#
using System;
using System.Text;

class Program
{
    static void Main()
    {
        string text = "こんにちは"; // 日本語の文字列
        Encoding shiftJis = Encoding.GetEncoding("shift_jis");

        // Shift_JISでエンコード
        byte[] encodedBytes = shiftJis.GetBytes(text);
        Console.WriteLine($"Shift_JISエンコード後のバイト数: {encodedBytes.Length}");

        // 再びデコード
        string decodedText = shiftJis.GetString(encodedBytes);
        Console.WriteLine($"デコードされた文字列: {decodedText}");
    }
}

注意しないといけないのは、異なるエンコーディング形式を混ぜて使うとデータが正しく解釈できなくなることなの。例えば、日本語の文字列をShift_JISでエンコードしてみるよ。

C#
using System;
using System.Text;

class Program
{
    static void Main()
    {
        string text = "こんにちは"; // 日本語の文字列
        Encoding shiftJis = Encoding.GetEncoding("shift_jis");

        // Shift_JISでエンコード
        byte[] encodedBytes = shiftJis.GetBytes(text);
        Console.WriteLine($"Shift_JISエンコード後のバイト数: {encodedBytes.Length}");

        // 再びデコード
        string decodedText = shiftJis.GetString(encodedBytes);
        Console.WriteLine($"デコードされた文字列: {decodedText}");
    }
}

.NET Coreや.NET 5以降の環境では、いくつかのエンコーディングがデフォルトでサポートされていないことがあるので、
Shift_JIS エンコーディングをサポートするためには、Encoding.RegisterProvider メソッドを使用してエンコーディングプロバイダーを登録する必要があるよ。

C#

using System;
using System.Text;

class Program
{
    static void Main()
    {
        // エンコーディングプロバイダーを登録
        Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

        string text = "こんにちは"; // 日本語の文字列
        Encoding shiftJis = Encoding.GetEncoding("shift_jis");

        // Shift_JISでエンコード
        byte[] encodedBytes = shiftJis.GetBytes(text);
        Console.WriteLine($"Shift_JISエンコード後のバイト数: {encodedBytes.Length}");

        // 再びデコード
        string decodedText = shiftJis.GetString(encodedBytes);
        Console.WriteLine($"デコードされた文字列: {decodedText}");
    }
}

これで、Shift_JISエンコードは完璧ね

バイト配列から文字列を生成する方法

次に、バイト配列を使って文字列を生成する方法を見ていくの。たとえば、ネットワーク通信で受信したデータを文字列として解釈するのに役立つのよ。

C#

using System;
using System.Text;

class Program
{
    static void Main()
    {
        byte[] data = { 227, 129, 147, 227, 130, 147, 227, 129, 171, 227, 129, 161, 227, 129, 175 };
        Encoding utf8 = Encoding.UTF8;

        // バイト配列を文字列にデコード
        string text = utf8.GetString(data);
        Console.WriteLine($"デコードされた文字列: {text}");
    }
}

このコードでは、UTF-8でエンコードされたバイト配列をデコードして文字列に変換しているの。

具体的な実用例 ファイル読み込みの使い方

次に、Encodingクラスを使ったファイル読み込みの実用例を紹介するの。以下のコードでは、UTF-8でエンコードされたファイルを読み込んでいるの。

C#
using System;
using System.IO;
using System.Text;

class Program
{
    static void Main()
    {
        string filePath = "example.txt"; // 読み込むファイル
        Encoding utf8 = Encoding.UTF8;

        // ファイルをUTF-8で読み込む
        string content = File.ReadAllText(filePath, utf8);
        Console.WriteLine($"ファイル内容: {content}");
    }
}

このように、「Encoding」クラスを使えば、ファイルを特定のエンコーディングで読み込むことが簡単にできるのよ。

まとめとそのほかのメソッド

「Encoding」クラスは、文字列とバイト列の相互変換だけでなく、次のような便利なメソッドも提供しているの:

  • GetEncoder:エンコーダーオブジェクトを取得する
  • GetDecoder:デコーダーオブジェクトを取得する
  • Encoding.Default:システム既定のエンコーディングを取得する

最後に、GetBytesメソッドを使ったもう一つの例を示すの。

C#
using System;
using System.Text;

class Program
{
    static void Main()
    {
        string text = "文字列をバイトに変換するのよ";
        Encoding utf8 = Encoding.UTF8;

        // 文字列をバイト配列に変換
        byte[] bytes = utf8.GetBytes(text);
        Console.WriteLine($"エンコードされたバイト配列の長さ: {bytes.Length}");
    }
}

これで、「Encoding」クラスの基本から応用までの解説は終わりなの。しっかり学んで使いこなしてほしいのよ。

このブログを検索

QooQ