UTF 8 nombres de archivo?

15

En los sistemas operativos basados ​​en Unix, ¿están permitidos los nombres de archivo utf6? Si es así, necesito hacer algo especial para escribir el archivo en el disco.

Déjame explicarte lo que espero hacer. Estoy escribiendo una aplicación que transferirá un archivo a través de ftp a un sistema remoto, pero el nombre de archivo se configura dinámicamente a través de algún conjunto de metadatos que potencialmente podrían estar en utf8. Me pregunto si hay algo que deba hacer para escribir el archivo en el disco en Unix / Linux.

Además, como seguimiento, ¿alguien sabe qué pasaría si subiera un nombre de archivo utf 8 a un sistema que no es compatible con utf8?

Mark D
fuente

Respuestas:

20

En Unix / Linux, un nombre de archivo es una secuencia de cualquier bytes, excepto una barra oblicua o un NUL. Una barra inclinada separa los componentes de la ruta y un NUL termina un nombre de ruta.

Por lo tanto, puede usar cualquier codificación que desee para los nombres de archivo. Algunas aplicaciones pueden tener problemas con algunas codificaciones si son ingenuas acerca de qué caracteres pueden estar en los nombres de archivos; por ejemplo, los scripts de shell mal escritos a menudo no manejan nombres de archivos con espacios.

Los entornos modernos de Unix / Linux manejan bien los nombres de archivos codificados UTF-8.

camh
fuente
12

Internamente, la mayoría de los sistemas de archivos almacenan bytes: al controlador del sistema de archivos no le importa lo que significan los bytes. El controlador genérico del sistema de archivos en Linux y en la mayoría de los otros dispositivos modernos permite que cualquier byte que no sea /y el byte nulo aparezca en un nombre de archivo.

Hay sistemas de archivos que pueden tener restricciones de codificación, generalmente sistemas de archivos no nativos como FAT o NTFS. Algunos sistemas de archivos de red como Samba pueden traducir entre la codificación del servidor y la codificación del cliente; deberá asegurarse de que las configuraciones del servidor y del cliente sean coherentes.

Convencionalmente, en la mayoría de los sistemas, los bytes que forman un nombre de archivo se interpretan como UTF-8. Si ejecuta una aplicación que interpreta los nombres de los archivos como caracteres, por ejemplo, una aplicación que transmite los nombres a través de FTP, es posible que necesite configurar esta aplicación para indicarle que sus nombres de archivo están codificados en UTF-8. Establecer el entorno LC_CTYPEen un entorno local UTF-8 como en_US.UTF-8hace el truco para muchas aplicaciones de línea de comandos.

Si almacena archivos en un sistema que no es compatible con UTF-8, no importa. Los bytes seguirán siendo los mismos. No podrá mostrar los caracteres que componen los nombres de los archivos, pero si copia los archivos nuevamente en un sistema que admita UTF-8, esos mismos bytes seguirán apareciendo como caracteres UTF-8.

Si está escribiendo su propia aplicación, usar UTF-8 internamente y, siempre que sea posible, para almacenamiento y transmisión es una buena idea.

Gilles 'SO- deja de ser malvado'
fuente