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」でのバイト数を取得することができます。
|
|