Je cherche un peu de conseils sur la meilleure façon de convertir un La carte est assez importante et est déjà bien em> intégrée au projet, et il n'y a qu'une poignée de clés nécessitant cette conversion, donc je pense que ce sera inutile de changer la carte en celui qui accepte La sortie de la conversion n'a pas vraiment d'importance, mais elle doit être cohérente afin de tirer de manière fiable les valeurs correctes de la carte à chaque fois. P>
L'application est une application Windows uniquement. P>
Y a-t-il un processus connu pour faire une conversion approximative de manière fiable à cette fin? Ou le meilleur moyen d'être via le processus de conversion habituel, approprié et approprié (comme décrit dans cette question / réponse: Comment convertir wstring en chaîne? )? P>
EDIT: strong> Veuillez garder à l'esprit - Perdre des informations, c'est bien tant que les choses fortes> sont cohérentes. I.e. Si je jette des caractères japonais, et ils convertissent systématiquement en la même (potentiellement poubelle) Merci! P> std :: wstring code> à
std :: string code> - mais une conversion rapide et sale pour Utiliser comme une clé dans un
std :: mappe
std :: wstring code> comme clé. p>
std :: string code>, c'est bon. Cela ne sera jamais à l'affichage, seulement pour être utilisé comme une clé pour tirer des valeurs d'une carte. P>
3 Réponses :
Si vous n'êtes pas intéressé par la sémantique du contenu, mais simplement au contenu à comparable, je vais simplement cohériter le WRCHAR interne [] dans un char [] de taille doublée et l'utiliser pour initialiser la chaîne ( En spécifiant l'adresse / la taille dans le constructeur) maintenant YO peut revenir en arrière comme suit: p> maintenant comparer p> doit imprimer Toutefois, note que cette façon la commande sur la carte (résultat de s code> est impristable (il peut contenir des caractères nuls) mais toujours assignables et comparables. P>
1 code>. p>
opérateur << / code>) est ... floue à cause de la présence du 0 et ne reflète aucun Sematics de texte. Cependant, la recherche fonctionne toujours, car -however Fuzzy - c'est toujours un "ordre". P> p>
Cela va distraire l'OP: Le but n'est évidemment pas d'avoir une belle impression, mais de vérifier qu'aucune perte d'informations ne se pose pendant un cycle. Quelle que soit la sortie qui change en fonction de l'égalité joue de la même manière. J'ai fait le plus court et plus simple, sans avoir besoin d'en-têtes supplémentaires. Il appartient à l'OP Trouver la meilleure "magnifique" pour son besoin (y compris le remplacement de la cout avec MessageBox ou quelle que soit la boîte de dialogue affichant toutes les choses qu'il aimerait)
Si c'était un ONUORDED_MAP, je serais préoccupé par les octets nuls dans la chaîne. Si la fonction de hachage a une spécialisation pour les chaînes, elle peut ou non respecter la taille réelle STD :: String et arrêtez-vous au premier octet Null.
Vous pouvez convertir stdd :: wstring vers utf-8 (en utilisant widechartomultibyte ou quelque chose comme cette liberme: http: // utfcppp .sourceforge.net / ), c'est-à-dire une c-string de terminaison NULL, puis construisez STD :: SCHING de celle-ci. Cette conversion sera réversible. P>
Variante, j'irais pour
std::wstring w( L"Some" ); std::string s( w.begin(), w.end() );
Oui, perdre des caractères ici et là lors de la conversions de chaîne, ce n'est généralement pas un gros problème! ;)
@MRT Si vous lisez la question, il demande «une conversion rapide et sale» et «la sortie de la conversion n'a pas vraiment d'importance», seulement «il doit être cohérent». Il existe également un complément de modification qui décrit exactement que "la perte d'informations est bien tant que les choses sont cohérentes" et "convertir en la même chaîne (potentiellement poubelle)", également "Cela ne sera jamais à l'affichage".
Non, ne faites pas cela. Cela ne fonctionne que pour l'anglais. Il détruit le texte en chinois, japonais et ainsi de suite.
Un Adaptateur ?
Peut-être devriez-vous convertir le
std :: wstring code> sur utf-8 a>, et définir la
std :: chaîne code> sur cette valeur. Vous éviterez des octets parasites '\ 0' de cette façon.
Pourquoi utilisez-vous
std :: wstring code> du tout? Utilisez UTF8 partout.
@Arne Mertz: Merci pour le lien avec cet article. Lire intéressante. Mais pour répondre à votre question: il n'y a pas de choix dans ce cas: P