.NET TIPS

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

デジタルアドバンテージ 岸本 真二郎
2008/10/23

 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クラスで扱えるエンコーディング名は?」参照してほしい。End of Article

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

この記事と関連性の高い別の.NET TIPS
JISコード(JIS-2022-JP)でメールを送信するには?
文字列をURLエンコードするには?
WindowsアプリケーションでHTMLデコード/エンコードを行うには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

TechTargetジャパン

Insider.NET フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH