[CSV+UNICODE] problème d'utilisation wstring unicode et écriture dans un fichier
Bonjour,
J'ai un problème de gestion de string UNICODE :
J'ai une interface grapique en C# d'ou je récupère une chaine de caractères à écrire dans un CSV. La partie écriture du fichier se fait depuis un DLL C++. Je passe par un Wrapper en C++/CLI pour faire le lien entre le C# et la DLL C++.
Dans mon Wrapper, je convertis en wstring ma chaine venant du C# :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| int ExportW::doExportCSV(String ^data, String ^csvFile) {
std::wstring dataStr(L"");
std::wstring csvFileStr(L"");
MarshalString(csvFile, csvFileStr);
MarshalString(data, dataStr);
return exportCSV(&dataStr, &csvFileStr);
}
void ExportW::MarshalString( String ^source, std::wstring& target) {
using namespace Runtime::InteropServices;
const wchar_t* chars = (const wchar_t*)(Marshal::StringToHGlobalUni(source)).ToPointer();
target = chars;
Marshal::FreeHGlobal(IntPtr((void*)chars));
} |
La fonction ExportCSV est une fonction d'une DLL pur C++:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| int ExportCSVDLL::exportCSV(std::wstring *data, std::wstring *csvFile) {
wofstream ofs;
ofs.open(csvFile->c_str());
//ofs << *data;
// ofs << data->length() << endl;
ofs.write(data->c_str(), sizeof(wchar_t) * data->length());
ofs.close();
return 0;
} |
J'ai essayé plusieurs solutions (même écrire en binaire). A chaque chaque génération du fichier CSV, l'écriture s'arrète au premier caractère UNICODE :?. J'ai l'impression qu'utiliser des wtring et wofstream n'est pas la bonne façon de faire.
Est-ce que qq un a une idée ? (autre façon d'écrire dans le fichier, utiliser autre chose que wtring...)
Merci,