« [R]数値の表示桁数を変える | トップページ | [gfortran]配列へのインデックスの指定のチェックと-fbounds-checkオプション »

2019年12月16日 (月)

[C#]文字列の一部の文字をバイト単位で抜き出す

C#は文字列の文字コードはUnicodeのため、例えばSubstringメソッドで文字列の一部を抜き出す場合は、文字単位でしか指定することができない。これをバイト単位で抜き出すには、以下のように文字コードにシフトJISを指定して、EncodingクラスのGetBytesメソッドとGetStringメソッドを利用する。

static string SubstringByte(string s, int i, int n) {
System.Text.Encoding sjis =
System.Text.Encoding.GetEncoding("shift_jis");
byte[] b = sjis.GetBytes(s);
return sjis.GetString(b, i, n);
}

第2引数にはSubstringメソッドと同様に、開始のインデックス(1文字目が0)を指定する。第3引数には抜き出すバイト数を指定する。

Console.WriteLine(SubstringByte("ABCDE", 0, 2));
Console.WriteLine(SubstringByte("ABCDE", 1, 3));
Console.WriteLine(SubstringByte("あいうえ", 0, 4));
Console.WriteLine(SubstringByte("あいうえ", 2, 2));
Console.WriteLine(SubstringByte("あいABC", 0, 5));
Console.WriteLine(SubstringByte("あいABC", 2, 4));
Console.WriteLine(SubstringByte("あいABC", 1, 4));

出力結果

AB
BCD
あい

あいA
いAB
(0xA0)いA ※先頭文字は画面表示不可の0xA0が表示

上記の自作メソッドは、マルチバイトの文字の処理は行っていない。そのため、最後の例のようにマルチバイトの文字列を分断するような指定をした場合は、バイト単位でそのとおりに処理されるので当然出力は乱れるので注意。

« [R]数値の表示桁数を変える | トップページ | [gfortran]配列へのインデックスの指定のチェックと-fbounds-checkオプション »

C#」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

« [R]数値の表示桁数を変える | トップページ | [gfortran]配列へのインデックスの指定のチェックと-fbounds-checkオプション »

無料ブログはココログ

■■

■■■