environnement MinGw / Windows avec caractères accentués

environnement MinGw / Windows avec caractères accentués - C++ - Programmation

Marsh Posté le 05-10-2015 à 14:36:13    

Bonjour,
 
Je travaille sur du code C++ d’une librairie utilisant des flux d’entrées et de sorties ifstream et ofstream. L’environnement d’exécution ciblé est Windows et le compilateur est MinGw g++. Le problème est que dès qu’il y a des caractères spéciaux (accents par exemple), mon code plante car l’UTF16 de windows n’est pas gérés par ces flux. Après moultes recherche sur internet, je ne trouve pas de solution à mon problème pourtant basique. Mes besoins seraient couverts par un code couvrant l’exemple suivant :
- Passage d’un chemin d’un fichier en argument de ligne de commande contenant des accents (ex : « C:\\temp\\nomaccentué.txt »),
- Lecture du contenu de fichier contenant une ligne décrivant un fichier accentué lui aussi (ex : « C:\\temp\\nomaccentué2.txt »),  
- Ecriture dans ce fichier d’une chaîne de caractères avec elle aussi des caractères accentués.
Dois-je nécessairement passé par l’API win32 ?  
 
Vous remerciant par avance.

Reply

Marsh Posté le 05-10-2015 à 14:36:13   

Reply

Marsh Posté le 05-10-2015 à 14:43:20    

Bonjour ! Et en passant par des wifstream/wofstream ? Logiquement, ils sont prévus pour gérer les caractères de plus d'un octet.
 
Bonne continuation !

Reply

Marsh Posté le 05-10-2015 à 15:07:20    

Farian a écrit :

Bonjour ! Et en passant par des wifstream/wofstream ? Logiquement, ils sont prévus pour gérer les caractères de plus d'un octet.
 
Bonne continuation !


 
Malheuresement on ne peut pas instancier wifstream/wofstream avec des wstring

Reply

Marsh Posté le 05-10-2015 à 15:43:59    

C'est possible, je n'ai utilisé que les wstring et wcout/wcin.
 
Mais c'est étonnant que l'ensemble ne soit pas cohérent, la STL ne nous avait pas habitué à de tels comportements.
 
Je suis déçu  :??:


Message édité par Farian le 05-10-2015 à 16:14:31
Reply

Marsh Posté le 05-10-2015 à 16:19:41    

godbeni a écrit :


 
Malheuresement on ne peut pas instancier wifstream/wofstream avec des wstring


Mouais, l'API d'ouverture des fichiers est extrêmement mal foutue sous Windows: avec Visual Studio, Microsoft a rajouté une surcharge a fstream::open pour accepter des const wchar_t * en nom de fichier, surcharge qui n'a jamais été standardisée.
 
wifstream c'est pour lire du contenu unicode, les noms de fichiers n'accepteront que des const char *.
 
Aucune API pour transmettre un descripteur bas niveau, histoire d'ouvrir le fichier par toi même, façon fdopen() de stdio.
 
Convertir le nom en UTF-8 ne fonctionnera pas non plus, faudra passer par l'encodage ANSI (ACP) et serrer les fesses pour que tous les caractères rentrent là dedans.
 
Sinon, il y a la bibliothèque boost qui supporte les noms unicode.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed