C++ 20 ajouté char8_t
et std::u8string
pour UTF-8. Cependant, il n'y a pas de version UTF-8 de std::cout
et les API OS attendent surtout char
et ensemble de caractères d'exécution. Nous avons donc toujours besoin d'un moyen de convertir entre l'ensemble de caractères UTF-8 et d'exécution.
J'étais relire un papier char8_t et il semble que le seul moyen de convertir entre UTF-8 et ECS consiste à utiliser std::c8rtomb
et std::mbrtoc8
les fonctions. Cependant, leur API est extrêmement déroutante. Quelqu'un peut-il fournir un exemple de code?
Afaik C++ ne fournit pas encore des installations pour une telle conversion. Cependant, je recommanderais d'utiliser std::u8string
En premier lieu car il est mal soutenu dans la norme et non pris en charge par des API système du tout (et ne sera probablement jamais à cause des raisons de compatibilité). Sur la plupart des plates-formes normales char
cordes sont déjà UTF-8 et sous Windows avec MSVC, vous pouvez compiler avec /utf-8
qui vous donnera une prise en charge portable Unicode sur les principaux systèmes d'exploitation.
La réponse commune donnée des autorités C++ lors de la convention annuelle de la CPPCON (comme en 2018 et 2019), c'était que vous devriez choisir votre propre bibliothèque UTF8. Il y a toutes sortes de saveurs choisissez simplement celle que vous aimez. Il reste encore embarrassant peu de compréhension et de soutien à Unicode sur le côté C++.
Certaines personnes comment il y aura quelque chose dans C++ 23, mais nous n'avons même pas de groupe de travail officiel jusqu'à présent.