« [C#]文字列を正規表現で置換する | トップページ | [C#]コードページ識別子の一覧を得る »

2024年3月 4日 (月)

[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#]文字列を正規表現で置換する | トップページ | [C#]コードページ識別子の一覧を得る »

無料ブログはココログ

■■

■■■