連載
» 2008年10月23日 05時00分 公開

.NET TIPS:文字列をBase64でエンコード/デコードするには?[C#、VB]

[岸本真二郎,デジタルアドバンテージ]
「.NET TIPS」のインデックス

連載目次

 Base64は、マルチバイト文字列や、画像などのバイナリ・データをテキスト形式に変換する手法の1つで、メールの送信などで多く用いられる。

 .NET Framework上でBase64を利用するにはConvertクラス(System名前空間)が使えるが、この際に日本語などのマルチバイト文字列を正しく扱うには、UTF-8やShift-JISといった文字コードを考慮しなければならない。

 そこで次のようなクラスを作っておくと、Base64の処理が簡単に行える。

using System;
using System.Text;

public class MyBase64str
{
  private Encoding enc;

  public MyBase64str(string encStr)
  {
    enc = Encoding.GetEncoding(encStr);
  }

  public string Encode(string str)
  {
    return Convert.ToBase64String(enc.GetBytes(str));
  }

  public string Decode(string str)
  {
    return enc.GetString(Convert.FromBase64String(str));
  }
}

Imports System
Imports System.Text

Public Class MyBase64str

  Private enc As Encoding

  Public Sub New(ByVal encStr As String)
    enc = Encoding.GetEncoding(encStr)
  End Sub

  Public Function Encode(ByVal str As String) As String
    Return Convert.ToBase64String(enc.GetBytes(str))
  End Function

  Public Function Decode(ByVal str As String) As String
    Return enc.GetString(Convert.FromBase64String(str))
  End Function

End Class

文字エンコーディングを含めたBase64処理を行うクラス(上:C#、下:VB)

 このクラスを利用する場合は、コンストラクタにエンコードを表す文字列を指定しておき、Encodeメソッド、DecodeメソッドでBase64のエンコード/デコード処理を行う。具体的には次のようなコードになる。

MyBase64str base64 = new MyBase64str("UTF-8");

string cnvStr = base64.Encode("Hello World こんにちは");
string rstStr = base64.Decode( cnvStr );

Console.WriteLine("Encoded:" + cnvStr);
Console.WriteLine("Restore:" + rstStr);

// 出力:
// Encoded:SGVsbG8gV29ybGQg44GT44KT44Gr44Gh44Gv
// Restore:Hello World こんにちは

Dim base64 As New MyBase64str("UTF-8")

Dim cnvStr As String = base64.Encode("Hello World こんにちは")
Dim rstStr As String = base64.Decode(cnvStr)

Console.WriteLine("Encoded:" + cnvStr)
Console.WriteLine("Restore:" + rstStr)

' 出力:
' Encoded:SGVsbG8gV29ybGQg44GT44KT44Gr44Gh44Gv
' Restore:Hello World こんにちは

上記MyBase64Strクラスの利用例(上:C#、下:VB)

 短いコードなので、コード・スニペットやツールボックスなどに登録しておくと便利だ。

 エンコーディングとして指定できる文字列は、「shift-jis」(「shift_jis」でも可能)「euc-jp」「iso-2022-jp」「UTF-8」などである。この詳細については「TIPS:Encodingクラスで扱えるエンコーディング名は?」参照してほしい。

カテゴリ:クラス・ライブラリ 処理対象:文字列
使用ライブラリ:Convertクラス(System名前空間)
関連TIPS:Encodingクラスで扱えるエンコーディング名は?


「.NET TIPS」のインデックス

.NET TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。