Поделиться через


Поддержка символов пробелов в именах файлов и папок для Windows

В этой статье описывается поддержка символов пробелов в именах файлов и папок.

Исходный номер базы знаний: 2829981

Итоги

Имена файлов и папок, начинающиеся или заканчивающиеся пробелом ASCII (0x20), будут сохранены без этих символов. Имена файлов и папок, заканчивающиеся символом точки ASCII (0x2E), также будут сохранены без этого символа. Сохраняются все остальные конечные или ведущие символы пробелов.

Например:

  • Если файл сохраняется как "Foo.txt", где ведущие символы являются пространством ASCII (0x20), он будет сохранен в файловой системе как "Foo.txt".
  • Если файл сохраняется как "Foo.txt", где конечные символы являются пробелом ASCII (0x20), он будет сохранен в файловой системе как "Foo.txt".
  • Если файл сохраняется как ". Foo.txt', где ведущие символы — это период ASCII (0x2E), он будет сохранен в файловой системе как ". Foo.txt'.
  • Если файл сохраняется как "Foo.txt.", где конечные символы являются периодом ASCII (0x2E), он будет сохранен в файловой системе как "Foo.txt".
  • Если файл сохраняется как "Foo.txt", где ведущие символы являются альтернативным символом пробела, например Ideographic Space (0x3000), он будет сохранен в файловой системе как "Foo.txt". Ведущие символы пробелов не удаляются.
  • Если файл сохраняется как "Foo.txt", где конечные символы являются альтернативным символом пробелов, например Ideographic Space (0x3000), он будет сохранен в файловой системе как "Foo.txt". Конечные пробелы не удаляются. Имена файлов и папок, начинающиеся или заканчивающиеся символами пробелов, перечисляются по-разному API Win32 и WinRT из-за требований экосистемы.

Дополнительная информация

Символы пробелов

Существуют различные символы пробелов, представляющие различные ширины пробелов (глифы). Только пробелы ASCII (0x20) и точки ASCII (0x24) обрабатываются специально диспетчером объектов. Хотя символ Ideographic Space (0x3000) также создается с помощью панели пробела (при включении IME), она не обрабатывается специально.

  • 0x0020 ПРОБЕЛ
  • 0x00A0 ПРОБЕЛЫ БЕЗ ПЕРЕРЫВА
  • 0X1680 OGHAM SPACE MARK
  • РАЗДЕЛИТЕЛЬ 0X180E МОНГОЛИИ
  • 0x2000 EN QUAD
  • 0x2001 EM QUAD
  • 0x2002 EN SPACE
  • 0x2003 EM SPACE
  • 0x2004 ТРЕХ-НА-ЭМ ПРОБЕЛ
  • 0x2005 ЧЕТЫРЕ-НА-ЭМ ПРОБЕЛ
  • 0x2006 ШЕСТИ-НА-ЭМ ПРОБЕЛ
  • 0X2007 ПРОБЕЛ ФИГУРЫ
  • 0X2008 ПРОБЕЛ ПРЕПИНАНИЯ
  • 0X2009 ТОНКОЕ ПРОСТРАНСТВО
  • 0x200A ПРОСТРАНСТВО ВОЛОС
  • 0x200B НУЛЕВОЕ ПРОСТРАНСТВО ШИРИНЫ
  • 0X202F УЗКИЙ ПРОБЕЛ
  • 0X205F СРЕДНЕГО МАТЕМАТИЧЕСКОГО ПРОСТРАНСТВА
  • 0X3000 IDEOGRAPHIC SPACE
  • 0xFEFF НУЛЕВОЙ ШИРИНЫ ПРОБЕЛА

Диспетчер объектов

Символы пространства ASCII (0x20) в начале или конце файла или папки удаляются диспетчером объектов при создании.

Символы периода ASCII (0x2E) в конце файла или папки удаляются диспетчером объектов при создании.

Все остальные начальные или конечные символы пробелов сохраняются диспетчером объектов.

Перечисление API

Win32 API

API Win32 (CreateFile, FindFirstFile и т. д.) использует прямой метод для перечисления файлов и папок в локальной или удаленной файловой системе. Все файлы и папки доступны для обнаружения независимо от включения или расположения символов пробелов.

WinRT API

API WinRT предназначен для поддержки нескольких поставщиков данных (физические диски, OneDrive, Facebook и т. д.). Для этого API WinRT использует поисковую систему для перечисления файлов и папок. Из-за подхода поиска к перечислению API WinRT (StorageFile, StorageFolder и т. д.) не обрабатывает имена файлов и папок с конечными символами пробелов, отличных от ASCII Space (0x20) и точки ASCII (0x2E), находящихся в локальной или удаленной файловой системе. Он обрабатывает ведущие символы пробелов, отличных от ASCII.

Наблюдаемое поведение

проводник и классические приложения

Все файлы и папки отображаются в проводник и классических приложениях независимо от включения или расположения символов пробелов.

Приложения Microsoft Store

При использовании средства выбора файлов файлы с символом пробела, отличного от ASCII, не отображаются. Содержимое вложенных папок с конечными символами пробелов, отличных от ASCII, не отображается в средстве выбора файлов. Отображаются файлы или папки, содержащие ведущий символ пробела, отличный от ASCII.