在Encoding.ASCII.GetString()之后删除不可打印的值

时间:2011-06-02 08:02:19

标签: c# string encoding byte non-printing-characters

假设我有一个Byte数组,并使用Encoding.ASCII.GetString()将字节转换为字符串。现在前几个字节将包含实际值,但其余字节都将包含 0 的值。获取字符串后,当我在WPF表单上显示它时,有一些不可打印的字符。如何删除这些不可打印的字符。一种方法是遍历数组,只考虑不包含 0 的索引,但我也可以使用Unicode进行编码,即Encoding.Unicode.GetString()

解决问题的最通用方法是什么。

3 个答案:

答案 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)

我只是找到数组中的第一个零,然后去除后面的所有内容。