Simplemente desea abrir un identificador de archivo utilizando una ruta que puede contener caracteres Unicode, ¿verdad? Simplemente pase la ruta en representación del sistema de archivos a fopen
.
Si la ruta de vino de las acciones marcos de Mac OS X (por ejemplo, un panel abierto si el carbono o el cacao), no tendrá que hacer ningún tipo de conversión en él y serán capaces de utilizarlo como -es.
Si se está generando parte de la ruta de usted, usted debe crear un CFStringRef de su camino y luego de que en la representación del sistema de ficheros para pasar a las API POSIX como open
o fopen
.
En general, no tendrá que hacer gran cantidad de eso para la mayoría de las aplicaciones. Por ejemplo, muchas aplicaciones pueden tener archivos de datos auxiliares almacenados en el directorio de soporte de aplicaciones del usuario, pero mientras los nombres de esos archivos sean ASCII, y use las API de Mac OS X estándar para localizar el directorio de soporte de aplicaciones del usuario, no necesita hacer un montón de conversión paranoica de una ruta construida con esos dos componentes.
Editado para agregar: quisiera advertir fuertemente contra arbitrariamente convertir todo a UTF-8 usando algo como wcstombs
porque el sistema de archivos de codificación no es necesariamente idéntico a la UTF-8 generada. Tanto Mac OS X como Windows usan reglas de descomposición canónicas específicas (pero diferentes) para la codificación utilizada en las rutas del sistema de archivos.
Por ejemplo, deben decidir si "é" se almacenará como una o dos unidades de código (ya sea LATIN SMALL LETTER E WITH ACUTE
o LATIN SMALL LETTER E
seguido de COMBINING ACUTE ACCENT
). Esto dará como resultado dos secuencias de bytes diferentes y de longitud diferente, y tanto Mac OS X como Windows funcionan para evitar colocar múltiples archivos con el mismo nombre (como el usuario los percibe) en el mismo directorio.
Las reglas sobre cómo realizar esta descomposición canónica pueden ser bastante complicadas, por lo que, en lugar de tratar de implementarlo por sí mismo, es mejor dejar las funciones que el sistema ha proporcionado para que realice el trabajo pesado.
si la eliminación es redundante, simplemente elimine – paulm