C# - よく使うクラス - System.Text - Encoding

クラウディア 
1. 概要
2. プロパティ
3. GetBytes バイト列に変換
4. GetByteCount バイト数を数える

1. 概要

 本家のドキュメントによれば、端的に「文字エンコーディングを表します。」とのことです。  本ページは、下記のサイトを参考にさせていただきました。
Encoding クラス (System.Text) 」
「.NET TIPS 文字列をシフトJISとしてバイト列に変換するには?」
「.NET TIPS 文字列の全角/半角をチェックするには? - C#
 使える文字コードの一覧等も上記サイトに掲載されています。  使わないものが多いので、ここで、コピペしたりはしません。

2. プロパティ

 わたしは、「UTF8」を使用するのに

System.Text.Encoding.UTF8
 を使用します。  通常、「Windows」上であっても、「C#」のデフォルトの文字コードは、「UTF8」なのですが。  「System.IO.StreamWriter」で、ストリームライタをオープンするときに、このプロパティを定義しないと、出力するテキストファイルが、「BOM」付きになってくれないのだ。

3. GetBytes バイト列に変換

 やりたかったのは、文字列を「Shift JIS」へ変換して、テキストファイルに出力したかったのですが。  まぁ、そういう需要があったのですよ。  参考サイトには、「派生クラスでオーバーライドされた場合、指定した文字列に含まれるすべての文字をバイト シーケンスにエンコードします。」とまぁ、ようわからん説明が書いてありますが。

public virtual byte[] GetBytes (string s);
 を使います。  オーバーロードメソッドが、たくさんあるのですが、わたしが使うのはこれです。  こんな、ソースを書きました(行番号がないと説明しにくいので、便宜的に入れておるです)。

string str = "ここで、なんか文字列をいれておるです。";

using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None))
{
	Encoding sjisEnc = Encoding.GetEncoding("Shift_JIS");
	byte[] bytes = sjisEnc.GetBytes(str);

	//// 末尾に文字列を追加
	fs.Seek(0, SeekOrigin.End);
	fs.Write(bytes, 0, bytes.Length);
}
 106行で、入ってきた「UTF-8」の文字列を「Shift JIS」化して、バイト列へ変換しています。  ファイルの末尾に、変換した文字列を追加書き込みしています。  実際のプログラムで、うまいこと出力されました。

4. GGetByteCount バイト数を数える

 「C#」では、基本的には文字数は、バイト数でなく純粋な文字数として数えます。  ここで何がやりたかったかというと、全角/半角交じりの文字列を、表示するときの枠の大きさをそえたいということなのです。  わたしは、等幅フォントを使っていますので、いわゆる半角文字は、1文字で1文字分、全角文字は、1文字で2文字分の幅をとりたいのです。  「UTF-8」では、これは判定できませんが。  「Shift-JIS」だと半角1バイト、全角1バイトなので、「Shift-JIS」変換かのうな文字列であれば、文字幅に対応するバイト数を取得することができます。

int byteCount = Encoding.GetEncoding("Shift_JIS").GetByteCount("半角/全角 混在文字列");
 で、「byteCount」に、「Shift-JIS」でのバイト数を取得することができます。
AbemaTV 無料体験