Python Unicode имя файла \ x01 в Windows - PullRequest
1 голос
/ 13 мая 2019

У меня есть скрипт Python, который генерирует кучу файлов с разными именами Unicode для тестирования.Он отлично работает в среде OS X и Linux.В Windows (и, что более важно, AppVeyor) он не может создать некоторые файлы, жалуясь на неверное имя файла.Вот очень минимальная версия:

with open("\x01", "w") as f:
  f.write("foo")

Я получаю ошибку:

Traceback (most recent call last):
  File "genTestRes.py", line 51, in <module>
    os.mkdir(os.path.join(TESTDIR, data))
OSError: [WinError 123] The filename, directory name, or volume label syntax is incorrect: 'test-res\\\x01'

Я могу воспроизвести ошибку CI локально на компьютере Windows с минимальным сценарием выше, наNTFS диск, с Python 2.7.Ничто из этого не помогло:

  • добавление # -*- coding: utf-8 -*- в начале
  • выполнение chcp 65001 перед командой
  • с использованием префикса Unicode (u"\x01")

Согласно Википедии , NTFS должна поддерживать как минимум

В пространстве имен Win32: любая единица кода UTF-16 (без учета регистра), кроме /:* "? <> | а также NUL

Что может быть причиной этого? U+0001 должно быть прекрасно, если не печатается, с кодом. Википедия здесь просто неправильна?

1 Ответ

2 голосов
/ 13 мая 2019

В Windows имена файлов NTFS не могут содержать управляющие символы ASCII 0x01 - 0x1F. См. Именование файлов, путей и пространств имен . Это правило применяется ко всем файловым системам Microsoft, но не обязательно к сторонним файловым системам. Например, файловая система общих папок VirtualBox позволяет управлять символами, двоеточием и каналом в именах файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...