假设我有一个Byte数组,并使用Encoding.ASCII.GetString()
将字节转换为字符串。现在前几个字节将包含实际值,但其余字节都将包含 0 的值。获取字符串后,当我在WPF表单上显示它时,有一些不可打印的字符。如何删除这些不可打印的字符。一种方法是遍历数组,只考虑不包含 0 的索引,但我也可以使用Unicode进行编码,即Encoding.Unicode.GetString()
。
解决问题的最通用方法是什么。
答案 0 :(得分:3)
var buffer = new byte[] { 65, 66, 67, 68, 0, 0, 0, 0, 0 };
var length = buffer.TakeWhile(b => b != 0).Count();
var text = Encoding.UTF8.GetString(buffer, 0, length);
答案 1 :(得分:0)
我认为 - 但您应该正确测试 - 在trim()
上应用String
可以解决问题。当然假设您的字符串的格式为XXXX00000
,其中X
是可打印的字符,而0
是不可打印的字符。
如果您使用XXXX0000XXXX
格式的字符串 - trim()
将无效。
正如我所说 - 这是一种预感,我相信不可打印的字符被视为White Spaces
。您可以尝试使用((char)0).IsWhiteSpace
验证它 - 如果它返回true
- 您应该没问题。
答案 2 :(得分:0)
我只是找到数组中的第一个零,然后去除后面的所有内容。