У меня много имен файлов данных Windows 7, которые, как представляется, содержат пробел непосредственно перед расширением. В конечном счете, я хочу устранить пробелы, но моя ближайшая проблема - найти их. Я предположил преобразование каждого символа имени файла в значение ASCII, а затем с помощью IndexOf значение ASCII найдет мое «пространство». Однако это не работает.ASCII Значение пустого символа в имени файла
string name = Path.GetFileName(fileName);
Console.WriteLine(name);
byte[] ASCIIValues = Encoding.ASCII.GetBytes(name);
foreach(byte b in ASCIIValues)
Console.WriteLine(b);
if(name.IndexOf((char)63) != -1)
Console.WriteLine("Space");
else
Console.WriteLine("NO Space");
Выход:
XL .WL
88
76
63
46
87
76
NO Space
Поскольку «пространство» в отчетах, как ASCII десятичное 63, я бы ожидал, что если написать «Space», а не иначе, чтобы написать «НЕТ Космос". Подставляя любые другие сообщенные значения ASCII в if, дает «Пробел» в качестве конечного вывода.
Любые идеи, что я делаю неправильно или другие способы найти имена файлов с дополнительным «пространством»?
Unicode имеет множество кодовых точек для различных видов непечатаемых. В конечном счете, ваша ошибка заключается в преобразовании имени файла в ASCII. Не используйте сжатие с потерями, если вам нужно увидеть Real Thing. Кроме того, [ASCII-символ 63 является «Вопросительным знаком». Пространство 32] (http://www.asciitable.com/). – IInspectable
Не принимайте ASCII. – Joe
Почему вы не используете [String.IsNullOrWhiteSpace] (http://msdn.microsoft.com/en-us/library/system.string.isnullorwhitespace (v = vs.110) .aspx) или [Char.IsWhiteSpace] (http://msdn.microsoft.com/en-us/library/t809ektx(v=vs.110).aspx)? Выбранная строка является строкой Unicode. Нет никакой гарантии, что вы можете преобразовать его в массив значений ASCII. –