Quel encodage utilisé quand invoquer fopen ou open?

Lorsque nous appelons un appel système dans Linux comme « open » ou une fonction stdio comme « fopen », nous devons fournir un « const char * filename ». Ma question est: quel est le codage utilisé ici? C’est utf-8 ou ascii ou iso8859-x? Cela dépend-il du système ou de l’environnement?

Je sais que dans MS Windows, il y a un _wopen qui accepte utf-16.

C’est une chaîne d’octets, l’interprétation dépend du système de fichiers particulier.

Cela dépend des parameters régionaux du système. Regardez la sortie de la commande “locale”. Si les variables se terminent par UTF-8, votre environnement local est UTF-8. La plupart des linux modernes utiliseront UTF-8. Bien qu’Andrew ait raison de dire que techniquement, il ne s’agit que d’une chaîne d’octets, si certains programmes ne fonctionnent pas correctement, il est impossible d’obtenir une entrée utilisateur correcte, etc.

Les appels de système de fichiers sous Linux sont indépendants du codage, c’est-à-dire qu’ils n’ont pas besoin de connaître l’encodage particulier. En ce qui les concerne, la chaîne d’octets désignée par l’argument filename est transmise au système de fichiers tel quel. Le système de fichiers s’attend à ce que les noms de fichiers soient dans le bon encodage (généralement UTF-8, comme mentionné par Matthew Talbert).

Cela signifie que vous n’avez souvent pas besoin de faire quoi que ce soit (les noms de fichiers sont traités comme des chaînes d’octets opaques), mais cela dépend vraiment de l’endroit où vous recevez le nom du fichier et de la manipulation du nom de fichier.

J’ai fait quelques recherches supplémentaires sur ce sujet et j’en suis venu à la conclusion qu’il existe deux manières différentes de gérer l’encodage des noms de fichiers par les systèmes de fichiers unixoid.

  1. Les noms de fichiers sont codés dans la “locale système”, ce qui est généralement le cas, mais ne doit pas nécessairement être identique à l’environnement local actuel reflété par la commande locale (mais certains sont prédéfinis dans un fichier de configuration global).

  2. Les noms de fichiers sont encodés en UTF-8, indépendamment des parameters régionaux.

GTK + résout ce gâchis en supposant UTF-8 et en permettant de le remplacer soit par le codage local actuel, soit par un encodage fourni par l’utilisateur.

Qt le résout en supposant un codage des parameters régionaux (et les parameters régionaux du système sont reflétés dans les parameters régionaux en cours) et en permettant de le remplacer par une fonction de conversion fournie par l’utilisateur.

Donc, la ligne du bas est la suivante: Utilisez soit UTF-8 ou ce que LC_ALL ou LANG vous disent par défaut, et fournissez un paramètre de remplacement au moins pour l’autre alternative.