.NET TIPS

文字列のバイト数を取得するには?

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

 TIPS:文字列の長さを取得するには?では、文字列のLengthプロパティにより文字数を取得したが、ファイルやデータベースあるいはネットワークに対して文字列を出力する場面などでは、文字列の文字数ではなく、文字列全体が占める実際のバイト数が必要となる場合がある。

 このような場合、TIPS:文字列をシフトJISとしてバイト列に変換するには?にあるように文字列をバイト列に変換してから、そのbyte型配列の長さを取得しても文字列のバイト数を取得できるが、EncodingクラスのGetByteCountメソッドを使用すれば、より簡単に取得することができる。

 文字列のバイト数を取得する場合、そのエンコーディング(文字コード体系)によって得られるバイト数は異なってくる。ここでは文字列をシフトJIS文字の並びとして扱う場合について解説する。つまり、Unicode文字列をシフトJIS文字列として解釈し、そのバイト数を取得する。

 まず、シフトJISをサポートしているEncodingオブジェクトを取得する。

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

 EncodingクラスとGetEncodingメソッドについては、冒頭に挙げたTIPS:文字列をシフトJISとしてバイト列に変換するには?で解説している。

 次に、パラメータでカウントする文字列を指定してGetByteCountメソッドを呼び出せば、その文字列のバイト数を取得できる。

string str = "こんにちわ";
int num = sjisEnc.GetByteCount(str);

 次のサンプル・プログラムでは、このようにして取得した文字列のバイト数と、文字列のLengthプロパティにより取得した文字数をそれぞれ表示する。

// strcount.cs

using System;
using System.Text;

class StringCount {
  public static void Main() {

    string str = "シフトJISでは何byte?";

    Encoding sjisEnc = Encoding.GetEncoding("Shift_JIS");
    int num = sjisEnc.GetByteCount(str);

    Console.WriteLine(num);
    // 出力:21

    Console.WriteLine(str.Length);
    // 出力:14
  }
}
// コンパイル方法:csc strcount.cs
文字列のバイト数と文字数を表示するC#のサンプル・プログラム(strcount.cs)

 シフトJISでは全角文字は2byteとなるため、文字列のバイト数とLengthプロパティで得た文字数が異なっているのが分かる。

 文字のエンコーディングとしてシフトJIS以外を扱う場合には、TIPS:Encodingクラスで扱えるエンコーディング名は?を参考にしていただきたい。End of Article

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

「.NET TIPS」

TechTargetジャパン

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

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

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

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

@IT Sepcial
ソリューションFLASH