バイト配列の文字列がC#でトリミングされませんか?
質問
次のようなバイト配列があります(16バイト):
71 77 65 72 74 79 00 00 00 00 00 00 00 00 00 00
これを使用して文字列に変換し、末尾のスペースを削除します:
ASCIIEncoding.ASCII.GetString(data).Trim();
文字列は問題ありませんが、まだすべての終了スペースがあります。
だから私は" qwerty .........."
のようなものを得ます(ここで、ドットはStackOverflowによるスペースです)。
何が間違っているのですか?
.TrimEnd()とUTF8エンコーディングを使用しようとしましたが、何も変わりません。
事前に感謝します:)
解決
これを修正するには、 TrimEnd(new char [] {(char)0});
を実行する必要があります。それはスペースではなく、実際には奇妙に変換されるヌル文字です。私もこの問題を抱えていました。
他のヒント
これらは実際にはスペースではありません:
System.Text.Encoding.ASCII.GetString(byteArray).TrimEnd('\0')
...トリックを行う必要があります。
-オイシン
デフォルトでトリム空白のみを削除します。空白は char.IsWhitespace
。
'\ 0'
は、空白ではなく制御文字です。
Trim(char [ ])
オーバーロード:
string result = Encoding.ASCII.GetString(data).Trim(new char[] { '\0' });
なぜ最初に文字列を作成し、次にそれをトリムしようとするのですか?これにより、多くのオーバーヘッドが追加される可能性があります(byte []が大きい場合)。
GetString(byte [] bytes、int index、int count)
オーバーロードで index
と count
を指定できます。
int count = data.Count(bt => bt != 0); // find the first null
string result = Encoding.ASCII.GetString(data, 0, count); // Get only the characters you want
PowerShellでは、これを行うことができます:
$yourString.TrimEnd(0x00)
所属していません StackOverflow