[C#]日本語を含む文字列の表示幅をバイト単位で指定する
C#では、内部の文字処理ではUnicodeを使用されているため、シフトJISでいうところの1バイト文字("A"や"1")と2バイト文字("A"や"あ")はいずれも一文字として扱われる。そのため、コマンドプロンプトでの画面表示などで表示位置を揃えようとすると、うまくいかないことがある。以下は、2つの文字列をそれぞれ8文字幅で左寄せで表示した例。
> string s1, s2;
> s1 = "Kaname"; s2 = "カナメ";
> Console.WriteLine("|" + $"{s1, -8}" + "|");
|Kaname |
> Console.WriteLine("|" + $"{s2, -8}" + "|");
|カナメ |
1バイト文字は一文字幅、2バイト文字は二文字幅で表示させたい場合は、その文字列をシフトJISに変換してGetByteCountメソッドで文字のバイト数を調べ、その分を考慮した長さの文字列を作成して表示させればよい。
> Encoding enc = Encoding.GetEncoding("Shift_JIS");
> string s1p, s2p;
> s1p = s1.PadRight(8 - (enc.GetByteCount(s1) - s1.Length));
> s2p = s2.PadRight(8 - (enc.GetByteCount(s2) - s2.Length));
> Console.WriteLine("|" + s1p + "|");
|Kaname |
> Console.WriteLine("|" + s2p + "|");
|カナメ |
« [C#]文字列を正規表現で置換する | トップページ | [C#]コードページ識別子の一覧を得る »
「C#」カテゴリの記事
- [C#]リストの要素を削除する(2024.05.02)
- [C#]リストに要素を追加する(2024.03.10)
- [C#]リストを作成する(2024.03.09)
- [C#]エラー「CS8370 機能 'target-typed オブジェクトの作成' は C# 7.3 では使用できません。9.0 以上の言語バージョンをお使いください。」(2024.03.08)
- [C#]StreamWriterクラスを使用して文字コードを指定してファイルに書き込む(2024.03.07)

コメント