Yat-il un moyen standard pour faire une fopen avec un chemin de fichier de type chaîne UNICODE?

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

  •  29-08-2019
  •  | 
  •  

Question

Yat-il un moyen standard pour faire une fopen avec un chemin de fichier de chaîne unicode?

Était-ce utile?

La solution

* nix, vous utilisez simplement les fopen standard (voir plus d'informations en réponse de TokeMacGuy, ou dans ce forum ) Dans Windows, vous pouvez utiliser _wfopen, puis passer une chaîne unicode (pour plus d'informations, voir MSDN ).

Comme il n'y a pas de véritable moyen commun, je terminerai cet appel dans une macro, ainsi que toutes les autres fonctions dépendant du système.

Autres conseils

Non, il n'y a aucun moyen standard. Il y a quelques différences entre les systèmes d'exploitation. Voici comment les différents systèmes d'exploitation gérer les noms de fichiers non-ASCII.

Linux

Sous Linux, un nom de fichier est tout simplement une chaîne binaire. La convention sur la plupart des distributions modernes est d'utiliser UTF-8 pour les noms de fichiers non-ASCII. Mais au début, il était courant d'encoder les noms de fichiers comme ISO-8559-1. Il est essentiellement à chaque application de choisir un codage, de sorte que vous pouvez même avoir des codages utilisés sur le même système de fichiers. La variable d'environnement LANG peut vous donner un indice ce que l'encodage préféré. Mais ces jours-ci, vous pouvez probablement supposer UTF-8 partout.

Ce n'est pas sans problème, cependant, car un nom de fichier contenant une séquence UTF-8 invalide est parfaitement valable sur la plupart des systèmes de fichiers Linux. Comment voulez-vous spécifier un nom de fichier si vous ne soutenez UTF-8? Idéalement, vous devriez soutenir à la fois UTF-8 et les noms de fichiers binaires.

OS X

Le système de fichiers HFS sur OS X utilise Unicode (UTF-16) les noms de fichiers interne. La plupart des C (et POSIX) fonctions de bibliothèque comme fopen acceptent UTF-8 chaînes (car ils sont 8 bits compatibles) et de les convertir en interne.

Fenêtres

L'API Windows utilise UTF-16 pour les noms de fichiers, mais fopen ne supporte que ASCII. De nombreuses fonctions de la bibliothèque C ont un équivalent non standard qui accepte UTF-16 (wchar_t sous Windows). Par exemple, _wfopen au lieu de fopen.

Ceci est une question de vos paramètres régionaux. sur mon système, ce qui est unicode activé, les chemins de fichiers seront en unicode. Je suis en mesure de détecter ce au moyen de la commande locale:

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

Le codage des chemins de fichiers est normalement défini l'ensemble du système, donc si votre chemin de fichier n'est pas dans les paramètres régionaux du système, vous aurez besoin de le convertir, peut-être au moyen du iconv bibliothèque.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top