649 Stimmen

Welche Zeichen sind in Windows- und Linux-Verzeichnisnamen verboten?

Ich weiß, dass / ist unter Linux verboten, und unter Windows sind die folgenden Dinge verboten (Ich glaube) * . " / \ [ ] : ; | ,

Was fehlt mir noch?

Ich brauche jedoch einen umfassenden Leitfaden, der folgende Punkte berücksichtigt Doppelbyte-Zeichen berücksichtigt. Ein Link zu externen Quellen ist für mich in Ordnung.

Ich muss zunächst ein Verzeichnis im Dateisystem erstellen, dessen Name möglicherweise verbotene Zeichen enthalten kann, weshalb ich plane, diese Zeichen durch Unterstriche ersetzen. Anschließend muss ich dieses Verzeichnis und seinen Inhalt in eine Zip-Datei schreiben schreiben (mit Java), daher wäre ich für jeden zusätzlichen Ratschlag bezüglich der Namen von Zip-Verzeichnissen geschätzt werden.

29voto

Leonardo Herrera Punkte 8141

Wenn Sie nur zu Forschungszwecken nachschauen wollen, ist es am besten, wenn Sie sich dieser Wikipedia-Eintrag über Dateinamen .

Wenn Sie eine portable Funktion schreiben wollen, um Benutzereingaben zu überprüfen und darauf basierend Dateinamen zu erstellen, lautet die kurze Antwort nicht . Werfen Sie einen Blick auf ein portables Modul wie das von Perl Datei::Spec einen Blick auf all die Hopfen zu werfen, die zur Erfüllung einer so "einfachen" Aufgabe erforderlich sind.

26voto

Cadoiz Punkte 965

Erörterung verschiedener möglicher Ansätze

Definitionsschwierigkeiten, was legal ist und was nicht wurden bereits angesprochen und Whitelists wurden vorgeschlagen . Aber Windows unterstützt mehr als 8-Bit Zeichen. Wikipedia erklärt dass (zum Beispiel) die

Modifizierungsbuchstabe Dickdarm [( Siehe 7. unten ) wird] manchmal in Windows-Dateinamen verwendet, da es identisch mit dem Doppelpunkt in der Segoe UI Schriftart, die für Dateinamen verwendet wird. Der [geerbte ASCII]-Doppelpunkt selbst ist nicht zulässig.

Daher möchte ich einen wesentlich liberaleren Ansatz unter Verwendung von Unicode vorstellen Homoglyphe Zeichen, um die "illegalen" Zeichen zu ersetzen. Ich fand das Ergebnis in meinem vergleichbaren Anwendungsfall bei weitem lesbarer. Und man kann sogar den ursprünglichen Inhalt aus den ersetzten Zeichen wiederherstellen.

Mögliche Optionen und Forschungshinweise

Der Übersichtlichkeit halber werde ich immer das Zeichen, seinen Namen und die hexadezimale Zahlendarstellung angeben. Bei letzterer wird nicht zwischen Groß- und Kleinschreibung unterschieden, und führende Nullen können nach Belieben hinzugefügt oder weggelassen werden, also zum Beispiel U+002A y u+2a gleichwertig sind. Falls verfügbar, werde ich versuchen, auf weitere Informationen oder Alternativen hinzuweisen - Sie können mir gerne weitere oder bessere Alternativen nennen.

  1. Anstelle von ( `U+2A ASTERISK), können Sie [einer der vielen](https://en.wikipedia.org/wiki/Asterisk#Encodings) aufgelistet, zum BeispielU+2217 (ASTERISK OPERATOR)oder dieFull Width Asterisk U+FF0A.u+20f0 combining asterisk above` von Kombination diakritischer Zeichen für Symbole könnte auch eine gute Wahl sein.

  2. Anstelle von . ( U+2E . full stop ), einer der diese könnte eine gute Option sein, zum Beispiel U+22C5 dot operator

  3. Anstelle von " ( U+22 " quotation mark ), können Sie “ U+201C english leftdoublequotemark , weitere Alternativen siehe hier . Ich habe auch einige der guten Vorschläge von Die Antwort von Wally Brockway In diesem Fall u+2036 reversed double prime y u+2033 double prime - Ich werde von nun an die Ideen aus dieser Quelle mit .

  4. Anstelle von / ( U+2F / SOLIDUS ), können Sie DIVISION SLASH U+2215 (andere aquí ), U+0338 COMBINING LONG SOLIDUS OVERLAY , COMBINING SHORT SOLIDUS OVERLAY U+0337 o u+2044 fraction slash . Achten Sie auf die Abstände für einige Zeichen, einschließlich der combining o overlay da sie keine Breite haben und etwas erzeugen können wie -> das, was ist this . Mit hinzugefügten Leerzeichen erhält man -> th is, das ist th is . Die zweite ( COMBINING SHORT SOLIDUS OVERLAY ) sieht in der Stackoverflow-Schriftart schlecht aus.

  5. Anstelle von \ ( U+5C Reverse solidus ), können Sie U+29F5 Reverse solidus operator ( mehr ) oder u+20E5 combining reverse solidus overlay

  6. Zu ersetzen [ ( U+5B [ Left square bracket ) と ] ( U+005D ] Right square bracket ), können Sie zum Beispiel verwenden U+FF3B FULLWIDTH LEFT SQUARE BRACKET y U+FF3D FULLWIDTH RIGHT SQUARE BRACKET (aus aquí , mehr Möglichkeiten aquí )

  7. Anstelle von : ( u+3a : colon ), können Sie U+2236 RATIO (for mathematical usage) o U+A789 MODIFIER LETTER COLON (siehe Doppelpunkt (Buchstabe) wird manchmal in Windows-Dateinamen verwendet, da es identisch ist mit dem Doppelpunkt in der Segoe UI Schriftart, die für Dateinamen verwendet wird. Der Doppelpunkt selbst ist nicht erlaubt ... Quelle und weitere Ersetzungen siehe aquí ). Eine andere Alternative ist diese: u+1361 ethiopic wordspace

  8. Anstelle von ; ( u+3b ; semicolon ), können Sie U+037E GREEK QUESTION MARK (siehe aquí )

  9. Para | ( u+7c | vertical line ), gibt es einige gute Ersatzstoffe wie z. B.: U+2223 DIVIDES , U+0964 DEVANAGARI DANDA , U+01C0 LATIN LETTER DENTAL CLICK (die letzten von Wikipedia ) oder U+2D4F Tifinagh Letter Yan . Auch die Kastenzeichnung Zeichen enthalten verschiedene andere Optionen.

  10. Anstelle von , ( , U+002C COMMA ), können Sie zum Beispiel verwenden ‚ U+201A SINGLE LOW-9 QUOTATION MARK (siehe aquí )

  11. Para ? ( U+003F ? QUESTION MARK ), sind dies gute Kandidaten: U+FF1F FULLWIDTH QUESTION MARK o U+FE56 SMALL QUESTION MARK (aus aquí y aquí ). Außerdem gibt es zwei weitere aus dem Dingbats-Block (Suche nach "Frage") und die u+203d interrobang

  12. Mein Rechner scheint sie zwar unverändert zu akzeptieren, aber ich möchte noch Folgendes hinzufügen > ( u+3e greater-than sign ) と < ( u+3c less-than sign ) der Vollständigkeit halber. Der beste Ersatz ist hier wohl auch aus dem Zitatblock , wie zum Beispiel u+203a › single right-pointing angle quotation mark y u+2039 ‹ single left-pointing angle quotation mark beziehungsweise. Der Tifinagh-Block enthält nur (u+2D66) zu ersetzen < . Der letzte Begriff ist less-than with dot u+22D6 y greater-than with dot u+22D7 .

Für weitere Ideen können Sie sich zum Beispiel auch informieren über dieser Block . Sie wollen noch mehr Ideen? Sie können versuchen zeichne deine Wunschfigur und schau dir die Vorschläge hier an .

Wie gibt man diese Zeichen ein?

Nehmen wir an, Sie möchten Folgendes eingeben (Tifinagh Letter Yan) . Um die Informationen zu erhalten, können Sie immer nach diesem Zeichen auf einer geeigneten Plattform suchen, wie z. B. dem Unicode-Suche (hinzufügen 0x wenn Sie nach Hex suchen) oder dies Unicode-Tabelle (das nur die Suche nach dem Namen erlaubt, in diesem Fall "Tifinagh Letter Yan"). Sie sollten seine Unicode-Nummer erhalten U+2D4F und der HTML-Code &#11599; (Beachten Sie, dass 2D4F ist hexadezimal für 11599 ) . Mit diesem Wissen haben Sie mehrere Möglichkeiten, diese Sonderzeichen zu erzeugen, darunter die Verwendung von

  • code points to unicode converter oder wieder die Unicode-Suche Um die numerische Darstellung in ein Unicode-Zeichen umzuwandeln, setzen Sie die untenstehende Basis des Codepunkts auf dezimal bzw. hexadezimal
  • ein Einzeiler in Makro Autohotkey : :?*:altpipe::{U+2D4F} zu tippen anstelle der Zeichenkette altpipe - So gebe ich diese Sonderzeichen ein. Mein Autohotkey-Skript kann bei gemeinsamem Interesse weitergegeben werden.
  • Alt Zeichen oder Alt-Codes durch langes Drücken alt , gefolgt von der Dezimalzahl für das gewünschte Zeichen (more info zum Beispiel aquí , Blick auf eine Tabelle aquí o dort ). Für das Beispiel würde das bedeuten Alt + 11599 . Beachten Sie, dass viele Programme diese Windows-Funktion nicht vollständig für alle Unicodes unterstützen (zum Zeitpunkt des Schreibens). M icro s Oft ist Office eine Ausnahme, wo es normalerweise funktioniert, einige andere Betriebssysteme bieten ähnliche Funktionen. Das Eingeben dieser Zeichen mit Alt-Kombinationen in MS Word ist auch der Weg Wally Brockway schlägt vor seine Antwort das bereits erwähnt wurde - wenn Sie nicht alle hexadezimalen Werte in dezimale umwandeln wollen asc können Sie einige von ihnen finden dort .
  • in MS Office, können Sie auch ALT + X wie beschrieben in dieser MS-Artikel um die Zeichen zu erzeugen
  • Wenn Sie es nur selten brauchen, können Sie das Sonderzeichen Ihrer Wahl natürlich auch einfach kopieren und einfügen, anstatt es einzutippen

14voto

Unter Windows können Sie dies mit PowerShell überprüfen

$PathInvalidChars = [System.IO.Path]::GetInvalidPathChars() #36 chars

Um UTF-8-Codes anzuzeigen, können Sie Folgendes konvertieren

$enc = [system.Text.Encoding]::UTF8
$PathInvalidChars | foreach { $enc.GetBytes($_) }

$FileNameInvalidChars = [System.IO.Path]::GetInvalidFileNameChars() #41 chars

$FileOnlyInvalidChars = @(':', '*', '?', '\', '/') #5 chars - as a difference

11voto

Kartik Soneji Punkte 864

Für alle, die nach einer Regex suchen:

const BLACKLIST = /[<>:"\/\\|?*]/g;

7voto

Bret Cameron Punkte 362

In Windows 10 (2019) werden die folgenden Zeichen durch einen Fehler verboten, wenn Sie versuchen, sie einzugeben:

Ein Dateiname darf keines der folgenden Zeichen enthalten:

\ / : * ? " < > | enter image description here

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X