3

Мне бы очень хотелось использовать такие символы, как "?"в Windows для имен файлов. Я понимаю, почему они зарезервированы, но почему они этого не сделали или будут обходить их, используя символы Unicode, которые выглядят одинаково, но (очевидно) имеют разные коды Unicode?

Я думаю, что это вполне возможно, но если нет, то почему?

4 ответа4

2

Я думаю, что причина, по которой они этого не делают, заключается в том, что они могут вызвать путаницу. Если у вас есть персонаж, который выглядит как "?"но имеет другой код Unicode - как вы скажете разницу?

Как бы вы это объяснили кому-то? «У вас не может быть знака вопроса в имени файла, но у вас может быть знак« что-то похоже на вопрос-вопрос-но-нет », и чтобы напечатать его, вам нужно всего лишь использовать это». комбинация клавиш.

Лучше (на мой взгляд) полностью их исключить и избежать ошибок.

2

Символы, которые не допускаются в имени файла:

  • < (меньше чем)
  • > (больше чем)
  • : (двоеточие)
  • " (двойная кавычка)
  • / (косая черта)
  • \ (обратная косая черта)
  • | (вертикальная черта или труба)
  • ? (вопросительный знак)
  • * (звездочка)

в соответствии с соглашениями об именах Microsoft.

Это то, что вы имели в виду?

Причина, вероятно, в том, что было бы слишком сложно иметь дело с файлами с этими символами в старой оболочке command.com , например ? также означает любой символ, * также означает любой файл и т. д.

Вместо того, чтобы учить всех, как обращаться с этими особыми случаями, они запретили это, делая его легче для сценария.

Не было бы эквивалентов Юникода для этих символов, и если бы был эквивалент, он все равно не решил бы эту проблему: существующий ASCII ? и * все равно должен был бы работать в качестве подстановочных знаков, иначе каждый должен был бы переписать свои сценарии.

2

Вы можете использовать следующий Юникод, который выглядит без риска оригинальным

Они действительны как имя окна:

  • «(U+00AB) вместо <(меньше чем)
  • »(U+00BB) вместо> (больше чем)
  • , (U+0589 или ÷ (U+00F7) или ‡ (U+2021) вместо: (двоеточие)
  • «(U+201C) вместо» (двойная кавычка)
  • ⁄ (U+2044) вместо / (косая черта)
  • ∖ (U+2216) или \ (U+FF3C) или 〵 (U+3035) вместо \ (обратная косая черта)
  • ¦ (U+00A6) вместо | (вертикальная черта или труба)
  • ‽ (U+ 203D)⁇ (U+2047) ¿(U+00BF) вместо? (вопросительный знак)
  • ☀ (U+2600) вместо * (звездочка)

NB. Таблица Unicode позволяет вам искать символ по описанию (например, по-римски), фактический символ, а также давать в качестве ссылки другие связанные символы (выглядящие одинаково)

Пожалуйста, найдите ниже действительное имя файла (скопируйте и вставьте его, чтобы попробовать; работает в Windows 7 с Windows Explorer и отображается правильно, извините, не могу добавить скриншот). Вы заметите, что под окнами внешний вид отличается от браузера (смена шрифта)

Юникод 一  ☀ ¦ »։∖ ‡ 〵 ÷ ╲‽⁇ ¿‰ ¢ π ∞ «≈.txt


Пара ссылок

  1. www.theasciicode.com.ar/extended-ascii-code/copyright-symbol-ascii-code-184.html
  2. http://www.theworldofstuff.com/characters/
  3. http://unicode-table.com/en/#00A9
  4. http://www.tedmontgomery.com/tutorial/altchrc-a.html
  5. http://unicode-table.com/en/#enclosed-alphanumerics
  6. https://stackoverflow.com/questions/8086375/what-character-to-use-to-put-an-item-at-the-end-of-an-alphabetic-list

Примечание: Windows является Posix-совместимой с 1980 года (согласно википедии), поэтому она соответствует posix RFC, включая тот, который задает имена файлов. Этот ответ при обмене стека дает более широкий контекст вокруг RFC и какие символы разрешены в именах файлов

1

Вы можете использовать эти символы сейчас сами. Но я предполагаю, что вы хотите, чтобы операционная система автоматически транслитерировала, например, между вопросительным знаком ASCII и двойником типа﹖ (SMALL QUESTION MARK ВОПРОСНАЯ МАРКА - UFE56). Я действительно не думаю, что это удовлетворительно, тем более что Linux и другие, где единственными недопустимыми символами для имен файлов являются косая черта (/) и ноль (ASCII 0), легко принимают эти символы.

Дальнейшее чтение:

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .