¿Depende de qué sistema de archivos utilizo? Por ejemplo, ext2 / ext3 / ext4 pero también ¿qué sucede cuando inserto uno de esos CD-ROM "joliet" con ISO 9660? ¿He oído que POSIX contiene algún tipo de especificación para la codificación de juegos de caracteres de nombres de archivo?
Esencialmente, lo que me pregunto es si obtuve un nombre de archivo codificado UTF-8, ¿qué procesamiento / cobertura necesito hacer antes de pasarlo a una API de E / S de archivo en Linux?
filenames
character-encoding
locale
martín
fuente
fuente
Respuestas:
Como han señalado otros, no hay realmente una respuesta para esto: los nombres de archivo y las rutas no tienen codificación; El sistema operativo solo se ocupa de la secuencia de bytes. Las aplicaciones individuales pueden elegir interpretarlas como codificadas de alguna manera, pero esto varía.
Específicamente, Glib (utilizado por las aplicaciones Gtk +) supone que todos los nombres de archivo están codificados en UTF-8, independientemente de la configuración regional del usuario . Esto puede anularse con las variables de entorno G_FILENAME_ENCODING y G_BROKEN_FILENAMES .
Por otro lado, Qt por defecto asume que todos los nombres de archivos están codificados en la configuración regional del usuario actual . Una aplicación individual puede optar por anular esta suposición, aunque no conozco ninguna que lo haga, y no hay un interruptor de anulación externo.
Las distribuciones modernas de Linux están configuradas de tal manera que todos los usuarios están utilizando configuraciones regionales UTF-8 y las rutas en los montajes de sistemas de archivos externos se traducen a UTF-8, por lo que esta diferencia en las estrategias generalmente no tiene efecto. Sin embargo, si realmente desea estar seguro, no puede asumir ninguna estructura sobre los nombres de archivo más allá de "secuencia de bytes delimitada por '/' terminada en NUL".
(También tenga en cuenta: la configuración regional puede variar según el proceso. Dos procesos diferentes ejecutados por el mismo usuario pueden estar en diferentes configuraciones regionales simplemente teniendo diferentes variables de entorno establecidas).
fuente
'\x2F'
independientemente de lo que parezca/
. Notablemente diferente en SJIS.A la capa unix / posix de linux no le importa qué codificación use. Almacena la secuencia de bytes de su codificación actual tal cual.
Creo que esas opciones de montaje están ahí para ayudarlo a convertir sistemas de archivos específicos que definen un conjunto de caracteres al conjunto de caracteres de su sistema. (Las variantes CDROM, NTFS y FAT utilizan algunas variantes unicode).
Deseo que Unix defina una codificación global del sistema, pero en realidad es una configuración por usuario. Entonces, si define una codificación diferente, entonces su colega, sus nombres de archivo se mostrarán de manera diferente.
fuente
Depende de cómo monte el sistema de archivos, solo eche un vistazo a las opciones de montaje para diferentes sistemas de archivos
man mount
. Por ejemploiso9660
,vfat
yfat
teneriocharset
yutf8
opciones.fuente