J'ai les belles fonctions de mon previous question, qui fonctionne très bien si je fais ceci:WideCharToMultiByte problème
wstring temp;
wcin >> temp;
string whatever(toUTF8(getSomeWString()));
// store whatever, copy, but do not use it as UTF8 (see below)
wcout << toUTF16(whatever) << endl;
La forme originale est reproduite, mais entre forme contient souvent des caractères supplémentaires. Si j'entre par exemple àçé
comme entrée et que j'ajoute une instruction cout << whatever
, j'obtiendrai …‡‚
en sortie. Puis-je toujours utiliser cette chaîne pour la comparer à d'autres, obtenues à partir d'une source ASCII? Ou demandé différemment: si je produisais ┬à┬ç┬é
par l'UTF8 cout dans Linux, lirait-il àçé
? Est-ce que le contenu en octets d'une chaîne àçé
, lu en UTF8 linux par cin, exactement le même que ce que l'API Win32 me obtient?
Merci! PS: la raison pour laquelle je demande est parce que j'ai besoin d'utiliser beaucoup la chaîne pour la comparer à d'autres valeurs de lecture (comparaison et concaténation ...).
Si vous utilisez WriteConsole de toute façon, vous pouvez également utiliser WriteConsoleW pour écrire directement la chaîne UTF-16, ce qui élimine la nécessité de SetConsoleOutputCP. – Philipp
@Philipp - Oui, convertir d'abord utf16 en utf8 et ensuite utiliser WriteConsoleA n'a pas beaucoup de sens. Si les chaînes de l'application (test-) sont déjà utf8, cela pourrait quand même avoir du sens. –