¿Hay una manera estándar de hacer un fopen con una ruta de archivo cadena Unicode?

StackOverflow https://stackoverflow.com/questions/396567

  •  29-08-2019
  •  | 
  •  

Pregunta

¿Hay una manera estándar de hacer un fopen con una ruta de archivo cadena Unicode?

¿Fue útil?

Solución

En * nix, sólo tiene que utilizar los fopen estándar (ver más información en respuesta a TokeMacGuy, o en este foro ) En las ventanas, puede utilizar _wfopen, y luego pasar una cadena Unicode (para más información, véase MSDN ).

Como no hay una forma común de bienes, me envuelvo este llamado en una macro, junto con todas las otras funciones dependientes del sistema.

Otros consejos

No, no hay manera estándar. Existen algunas diferencias entre los sistemas operativos. Así es como manejar nombres de archivo diferentes sistemas operativos que no sean ASCII.

Linux

En Linux, un nombre de archivo es simplemente una cadena binaria. La convención en la mayoría de las distribuciones modernas es el uso de UTF-8 para los nombres de archivo no ASCII. Pero al principio, era común para codificar los nombres de archivos como ISO-8559-1. Es, básicamente, depende de cada aplicación para elegir una codificación, por lo que incluso puede tener diferentes codificaciones utilizadas en el mismo sistema de archivos. La variable de entorno LANG le puede dar una pista de lo que es la codificación preferido. Pero en estos días, es probable que puedan asumir UTF-8 en todas partes.

Esto no está exenta de problemas, sin embargo, porque un nombre de archivo que contiene una secuencia de codificación UTF-8 no válida es perfectamente válido en la mayoría de los sistemas de ficheros de Linux. ¿Cómo se especifica un nombre de archivo como si es compatible con UTF-8? Idealmente, usted debe apoyar tanto a los nombres de archivo UTF-8 y binarios.

OS X

El sistema de ficheros HFS en OS X utiliza Unicode (UTF-16) nombres de archivos internos. La mayoría de C (y POSIX) funciones de biblioteca como fopen aceptan cadenas UTF-8 (ya que son compatibles 8 bits) y las convierte internamente.

Windows

La API de Windows utiliza UTF-16 para los nombres de archivo, pero fopen sólo es compatible con ASCII. Muchas funciones de biblioteca C tienen un equivalente no estándar que acepta UTF-16 (wchar_t en Windows). Por ejemplo, _wfopen en lugar de fopen.

Este es un asunto de su localización actual. en mi sistema, que está habilitada con Unicode, las rutas de archivos estarán en Unicode. Soy capaz de detectar esto mediante el comando locale:

$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"

La codificación de las rutas de archivos normalmente se establece para todo el sistema, así que si su ruta de archivo no se encuentra en la configuración regional del sistema, que se necesitan para convertirlo, tal vez por medio de la iconv biblioteca.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top