.NET TIPS

文字列をシフトJISとしてバイト列に変換するには?

デジタルアドバンテージ
2003/04/11

 .NET Frameworkでは、文字列はすべてUnicode文字の並びとして処理される。しかし日本語を扱うアプリケーションやシステムでは、文字列データの文字コード体系としてUnicode以外(シフトJISやEUC-JPなど)を使用しているものが少なくない。このようなシステムとデータをやりとりする場合、プログラムで処理したUnicode文字列をシフトJIS文字列などに変換し、それをバイト列(byte型データの配列)として扱う必要が生じることがある。

 このような文字コードの変換を行う場合には、Encodingクラス(System.Text名前空間)を利用する。このクラスには、文字列をバイト列に変換する(エンコードする)ためのGetBytesメソッドが用意されている。

 ただし、Encodingクラスは正確には抽象クラスであり、そのサブクラスとしては、7ビットASCII、Unicode(2個の連続したバイト)、UTF-7、UTF-8の4つのエンコーディングに対応した4つのクラスが用意されているだけだ。これ以外のエンコーディングを行う場合には、EncodingクラスのGetEncodingメソッドにより、まずEncodingオブジェクトを取得する必要がある。

 シフトJISに対応したEncodingオブジェクトは、次のようにパラメータで文字列「Shift_JIS」を指定して取得することができる。GetEncodingメソッドはstaticなメソッドなので、インスタンスなしで直接呼び出すことができる。

Encoding sjisEnc = Encoding.GetEncoding("Shift_JIS");

 なお、パラメータで指定可能なエンコーディングの種類については、TIPS:Encodingクラスで扱えるエンコーディング名は?で解説している。

 このようにして得られたシフトJIS用のEncodingオブジェクトは、Unicode文字列をシフトJIS文字列に変換するための仕組みを実装しているわけだ。次に、Unicode文字列をパラメータとして、このオブジェクトに対してGetBytesメソッドを呼び出せば、シフトJIS文字列に変換された結果をバイト列として取得できる。

string str = "こんにちわ";
byte[] bytes = sjisEnc.GetBytes(str);

 次のサンプル・プログラムでは、シフトJISへと変換した文字列を画面に表示している。

// str2byte.cs

using System;
using System.Text;

class StringToBytes {
  public static void Main() {

    string str = "シフトJISへ変換";

    Encoding sjisEnc = Encoding.GetEncoding("Shift_JIS");
    byte[] bytes = sjisEnc.GetBytes(str);

    Console.WriteLine(BitConverter.ToString(bytes));
    // 出力:83-56-83-74-83-67-4A-49-53-82-D6-95-CF-8A-B7
  }
}
// コンパイル方法:csc str2byte.cs
文字列をバイト列に変換し、結果を16進数で表示するC#のサンプル・プログラム(str2byte.cs)

 BitConverterクラス(System名前空間)のToStringメソッドは、パラメータにbyte型の配列を指定することにより、それをハイフン区切りの16進数文字列に変換することができる。ここではこれを利用して、シフトJISに変換された文字列の文字コードを表示している。

 上記サンプル・プログラムの出力結果と各文字との対応は次のようになっている。

83-56
83-74
83-67
4A
49
53
82-D6
95-CF
8A-B7
J
I
S

 ここでは、文字列からバイト列への変換を行ったが、バイト列から文字列への逆向きの変換についてはTIPS:バイト列を文字列に変換するには?で解説している。End of Article

カテゴリ:クラス・ライブラリ 処理対象:文字列
使用ライブラリ:Encodingクラス(System.Text名前空間)
関連TIPS:バイト列を文字列に変換するには?
関連TIPS:Encodingクラスで扱えるエンコーディング名は?
 
この記事と関連性の高い別の.NET TIPS
バイト列を文字列に変換するには?
文字列のバイト数を取得するには?
Encodingクラスで扱えるエンコーディング名は?
バイト列と数値を変換するには?
WebClientクラスでWebページを取得するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間