Bonjour,
Ma question va sembler "bête", mais je suis confronté à quelque chose que je ne comprends pas donc je veux m'assurer d'une chose avant tout.
En .Net les chaînes de caractères sont en unicode il me semble, quelle que soit l'origine de la donnée (lecture du contenu d'un fichier, ...). Si je converti ma chaîne de caractères en un pointeur (char *) avec la méthode StringToHGlobalAnsi pour ensuite recréer une chaîne de caractères managée
il n'y a aucune "perte" possible au niveau des caractères et heureusement d'ailleurs, sinon bonjour le bordel. J'ai tout bon ou pas ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 String ^ s1 = "äâàëêéèïîìöôòüûù"; char * c = static_cast<char*>(Marshal::StringToHGlobalAnsi(s1).ToPointer()); String ^ s2 = gcnew String(c, 0, s1->Length, Encoding::Default);
Je pose cette question parce que j'ai une API qui prend en entrée un char *, j'ai encapsulé l'appel à l'API dans un wrapper C++/CLI appelé par du C# et ce qui est bizarre c'est que suivant l'origine de la chaîne de caractères (lecture d'un fichier ou en dur dans le code), l'API ne réagit pas de la même façon.
En fait je me fait jeter avec un message d'erreur comme quoi le format de la chaîne d'entrée est incorrect dans le cas où je passe par la lecture d'un fichier (j'utilise File.ReadAllText(chemin, Encoding.UTF8) pour la lecture) et la seule chose qui me vienne à l'esprit c'est un problème d'encodage des données.
Si j'ai tout bon, il faudra que je vois du côté de l'API.
Partager