web-dev-qa-db-fra.com

Convertir entre STD :: U8String et STD :: String

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?

21
user3624760

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.

0
vitaut

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.

0
Lothar