Nomi dei file UTF 8?


15

Nei sistemi operativi basati su unix sono ammessi nomi di file utf6? In tal caso, devo fare qualcosa di speciale per scrivere il file su disco.

Lasciami spiegare cosa spero di fare. Sto scrivendo un'applicazione che trasferirà un file tramite ftp su un sistema remoto ma il nome del file è impostato dinamicamente su un set di metadati che potenzialmente potrebbero essere in utf8. Mi chiedo se c'è qualcosa che devo fare per scrivere il file su disco in unix / linux.

Inoltre, come follow-up qualcuno sa cosa accadrebbe se avessi caricato un nome file utf 8 su un sistema non supporta utf8?

Risposte:


20

Su Unix / Linux, un nome file è una sequenza di tutti i byte ad eccezione di una barra o di un NUL. Una barra separa i componenti del percorso e un NUL termina un nome percorso.

Quindi, puoi usare qualunque codifica desideri per i nomi dei file. Alcune applicazioni potrebbero avere problemi con alcune codifiche se sono ingenui su quali caratteri possano essere nei nomi dei file - ad esempio, gli script di shell scritti male spesso spesso non gestiscono i nomi di file con spazi.

I moderni ambienti Unix / Linux gestiscono bene i nomi di file codificati UTF-8.


12

Internamente, la maggior parte dei filesystem memorizza i byte: il driver del filesystem non si preoccupa del significato dei byte. Il driver generico del filesystem su Linux e la maggior parte degli altri unici moderni consente a qualsiasi byte diverso da /e il byte null di apparire in un nome file.

Esistono file system che possono avere vincoli di codifica, generalmente file system non nativi come FAT o NTFS. Alcuni filesystem di rete come Samba possono tradurre tra la codifica del server e la codifica del client; dovrai assicurarti che le configurazioni del server e del client siano coerenti.

Convenzionalmente, sulla maggior parte dei sistemi, i byte che compongono un nome file vengono interpretati come UTF-8. Se si esegue un'applicazione che interpreta i nomi dei file come caratteri, ad esempio un'applicazione che trasmette i nomi su FTP, potrebbe essere necessario configurare questa applicazione per dire che i nomi dei file sono codificati in UTF-8. L'impostazione dell'ambiente LC_CTYPEsu una locale UTF-8 come en_US.UTF-8quella del trucco per molte applicazioni da riga di comando.

Se memorizzi i file su un sistema che non supporta UTF-8, non importa. I byte rimarranno gli stessi. Non sarà possibile visualizzare i caratteri che compongono i nomi dei file, ma se si copiano i file su un sistema che supporta UTF-8, gli stessi byte verranno comunque visualizzati come caratteri UTF-8.

Se stai scrivendo la tua applicazione, usa UTF-8 internamente e, quando possibile, per l'archiviazione e la trasmissione è una buona idea.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.