Unterschiedliche utf8 Kodierung in Dateinamen os x

8

Ich habe ein kleines Shellscript in .x

%Vor%

Wenn ich scrpit sh -x .x (-x nur zum Anzeigen von Befehlen) benutze

%Vor%

Der gleiche String Böhmáí hat sich in verschiedenen Bytes im Dateinamen vs. als Inhalt einer Datei codiert. Im Terminal (utf8-encoded) die Zeichenfolge looks same in beiden Varianten.

Wo ist der Hase?

    
jm666 27.05.2011, 14:03
quelle

1 Antwort

21

(Dies ist meist gestohlen von einem vorherige Antwort von mir ...)

Unicode ermöglicht die Darstellung einiger akzentuierter Zeichen auf verschiedene Arten: als "Codepunkt", der das Akzentzeichen darstellt, oder als eine Reihe von Codepunkten, die die unbetonte Version des Zeichens darstellen, gefolgt von den Akzenten. Zum Beispiel könnte "ä" entweder vorkomposiert als U + 00E4 (UTF-8 0xc3a4, lateinischer Kleinbuchstabe 1 mit Diärese) dargestellt oder als U + 0061 U + 0308 (UTF-8 0x61cc88, lateinischer Kleinbuchstabe a + kombinierende Diärese) zerlegt werden ).

Das HFS + Dateisystem von OS X erfordert, dass alle Dateinamen in der UTF-8-Darstellung ihrer vollständig zerlegt . In einem HFS + -Dateinamen muss "ä" als 0x61cc88 kodiert sein, und "ö" muss als 0x6fcc88 codiert sein.

Was also hier passiert ist, dass Ihr Shell-Skript "Böhmáí" in vorkomposierter Form enthält, so wird es in der Variable a gespeichert und auf diese Weise in der .text-Datei gespeichert. Wenn Sie jedoch eine Datei mit diesem Namen erstellen (mit touch ), konvertiert das Dateisystem es in das zerlegte Formular für den tatsächlichen Dateinamen. Und wenn Sie ls it, zeigt es die Form des Dateisystems: die zerlegte Form.

    
Gordon Davisson 27.05.2011, 14:31
quelle

Tags und Links