Удаление непечатных значений aftert Encoding.ASCII.GetString () - PullRequest
2 голосов
/ 02 июня 2011

Предположим, у меня есть массив байтов, и я использую Encoding.ASCII.GetString() для преобразования байтов в строку. Теперь первые несколько байтов будут содержать действительные значения, но все остальные будут иметь значение 0 . После получения строки, когда я показываю ее в форме WPF, появляются некоторые непечатаемые символы. Как я могу удалить этих непечатаемых символов. Одним из способов может быть циклический просмотр массива и рассмотрение только индекса, не содержащего 0 , но я также могу кодировать с использованием Unicode, то есть Encoding.Unicode.GetString().

Какой самый общий способ решения проблемы.

Ответы [ 3 ]

3 голосов
/ 02 июня 2011
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);
0 голосов
/ 02 июня 2011

Я бы просто нашел первый ноль в массиве и удалил все, что следует.

0 голосов
/ 02 июня 2011

Я думаю - но вы должны проверить это правильно - что применение trim() к String должно решить проблему.Предположим, конечно, что ваша строка имеет формат XXXX00000, где X - это печатный символ, а 0 - не печатный.Если у вас есть String в формате XXXX0000XXXX - trim(), ничего не будет делать.

Как я уже сказал - это догадка, я считаю, что непечатные символы рассматриваются как White Spaces.Вы можете попробовать проверить это с помощью ((char)0).IsWhiteSpace - если он вернет true - с вами все будет в порядке.

...