Comment faire pour lire un fichier contenant des caractères Unicode ?
michelcreve
Messages postés13Date d'inscriptionmardi 1 mars 2005StatutMembreDernière intervention10 mars 2006
-
30 sept. 2005 à 17:29
Neo.balastik
Messages postés796Date d'inscriptionjeudi 17 mai 2001StatutMembreDernière intervention 5 mai 2009
-
30 sept. 2005 à 21:02
- J'essai de faire un Utilitaire de reformatage d'un fichier lu en entrée et création d'un autre fichier en sortie.
- Le programme demande le chemin daccès du fichier en entrée
la longueur des enregistrements en sortie
et éventuellement si on veut tronquer ou faire un retour a la ligne
Le problème que j'ai, c'est que lorsque je lis des fichiers en provenance de Windows NT, toutes les caractères 'é' 'è' 'à', unicode etc.. sont ignorés et ne sont pas repris alors que les fichiers venant de XP c'est OK ??.
Je pense que le problème se situe dans le code recopié cidessous (en rouge):
Il faut surement utiliser autre code, mais lequel ?
FileStream* fw = new FileStream(path, FileMode::Open);
StreamReader* sr = new StreamReader(fw);
Merci d'avance pour ceux qui peuvent m'aider
Michel (le mari de la belle cicilienne)
Voici mon source :
// This is the main project file for VC++ application project
// generated using an Application Wizard.
#include "stdafx.h"
#using <mscorlib.dll>
using namespace System;
using namespace System::IO;
using namespace System::Text;
#include <valarray>
#include <Cstring>
#include
#include
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
// This is the entry point for this application
#ifdef _UNICODE
int wmain(int argc, wchar_t *argv[], wchar_t *envp[] )
//int wmain(void)
#else
int main(int argc, char* argv[])
#endif
{
using namespace std;
String* path = new String(argv[1]);
int longueur = 0;
string line2 ("");
char respons = ' ' ;
//Console::Write("Valeur de argc = ");
//Console::WriteLine(argc);
//Console::WriteLine(argv[1]);
//Console::WriteLine(argv[2]);
if (argc < 2) // Verifie si on a passé le 1er parametre
{
Console::WriteLine(S" ----------------------------------------------");
Console::WriteLine(S" Veuillez entrer le chemin et nom de fichier : ");
Console::WriteLine(S" ----------------------------------------------");
path = Console::ReadLine();
}
if (argc == 3) // Verifie si on a passé le 2eme parametre
{longueur = atoi(argv[2]);
}
if (longueur == 0) // Verifie si on a passé la longueur
{
Console::WriteLine(S" ----------------------------------------------------");
Console::WriteLine(S" Veuillez entrer la longueur de chaque record desiré ");
Console::WriteLine(S" ----------------------------------------------------");
longueur = Console::ReadLine()->ToInt16(0);
}
if (!File::Exists(path)) // Verifie si le fichier existe
{
Console::WriteLine(S" --------------------------------------");
Console::WriteLine(S" Fichier ou chemin d'accès incorrect ! ");
Console::WriteLine(S" --------------------------------------");
Console::WriteLine(path);
Console::WriteLine(S" --------------------------------------");
cin.ignore();
return -1;
}
try
{
// Create a FileStream
String* path2 = S"D:\\data\\MyTest2.out";
//FileStream* fs = new FileStream("d:\\data\\output.txt", FileMode::Create);
// Create a StreamWriter
StreamWriter* sw = new StreamWriter(path2, false, new UnicodeEncoding());
//StreamWriter* sw = new StreamWriter(fs); topé 09sept
FileStream* fw = new FileStream(path, FileMode::Open);
StreamReader* sr = new StreamReader(fw);
int count = 0;
michelcreve
Messages postés13Date d'inscriptionmardi 1 mars 2005StatutMembreDernière intervention10 mars 2006 30 sept. 2005 à 17:42
PS : Joubliais, si vous avez un code erreur sur le fichier entête stdafx.h, il suffit de
Créer le fichier avec des commentaires genre :
Fichier stdafx.h :
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
michelcreve
Messages postés13Date d'inscriptionmardi 1 mars 2005StatutMembreDernière intervention10 mars 2006 30 sept. 2005 à 17:42
PS : Joubliais, si vous avez un code erreur sur le fichier entête stdafx.h, il suffit de
Créer le fichier avec des commentaires genre :
Fichier stdafx.h :
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//