Je souhaite convertir wstring en codage UTF-8, mais je veux utiliser des fonctions intégrées de Linux.
y a-t-il une fonction intégrée convertie Exemple: P> wstring code> ou
ou
wchar_t * code> à utf-8 sous Linux avec une invocation simple forte>? p>
wstring str = L"file_name.txt";
wstring mode = "a";
fopen([FUNCTION](str), [FUNCTION](mode)); // Simple invoke.
cout << [FUNCTION](str); // Simple invoke.
4 Réponses :
Certainement, il n'y a pas de fonction intégrée sur Linux, car le nom Linux fait référence au noyau uniquement, ce qui n'a rien à aigu. Je doute sérieusement que le libc fourni avec GCC a une telle fonction et soutient cette théorie. Mais il y a beaucoup de bonnes bibliothèques UTF-8 autour. Je recommande personnellement la bibliothèque iconv pour de telles conversions. P> p>
Votre recherche de votre homme vous repose: Linux glibc a une implémentation Iconv: gnu.org/s/hello/manual/libc/glibc-iconv-implementation.html
Il est tout à fait plausible que WCSTOMBS fera savoir ce dont vous avez besoin si ce que vous voulez réellement faire est de convertir des caractères de large à la locale actuelle. p>
Sinon, vous n'avez probablement pas besoin de regarder l'ICU, booster ou similaire. p>
WCSTOMBS code> n'a aucune notion de codages spécifiques. Ce n'est pas la réponse.
WCSTOMBS code> devrait fonctionner si et uniquement si les paramètres régionaux actuels sont
utf-8 code>.
La norme de langue C ++ n'a aucune notion de codages explicites. Il ne contient qu'une notion opaque d'un "codage de système", pour laquelle Pour convertir du système opaque codant en un codage externe explicite, vous devez utiliser une bibliothèque externe. La bibliothèque de choix serait C ++ 11 ajoute de nouveaux littéraux em> sous forme de Voir cette question pour un peu plus d'arrière-plan. P> wchar_t code> est un type "suffisamment grand". P>
iconv () code> (à partir de
wchar_t code> to
utf-8 code>), qui fait partie de POSIX et disponible sur de nombreuses plates-formes, Bien que sur Windows, le
widechartomultibyte code >
fonctions est garantie de produire UTF8. P>
std :: string s = u8 "bonjour monde: \ u0010ffff"; code>. Celles-ci sont déjà dans UTF8, mais elles ne peuvent pas interfacer avec l'opaque
wstring code> autre que dans la manière dont j'ai décrit. P>
Les chaînes UTF-8 de C ++ 11 peuvent interfacer avec Wtstrings via wstring_convert code>
@Cubbi: Je ne suis pas convaincu que cela a quelque chose à voir avec UTF8. Il ressemble à une simple wrapper pour wcstombbs code>. (Il y a un en-tête
wstring_convert code> n'est pas lié à
wcstombs code>. C'est une enveloppe pour les facettes CODECVT, telles que
codecvt_utf8 code>.
@KERReck SB: Je pense que je vois votre point de vue: À l'exception des fonctions SAFT
Si / Lorsque votre compilateur prend suffisamment de C ++ 11, vous pouvez utiliser testé avec clang ++ 2.9 / libc ++ sur Linux et Visual Studio 2010 sous Windows. P> p> wstring_convert code>
STD :: wbuffer_convert, std :: wstring_convert et the
@ A.DANESH C'était une dépréciation ambrénale, comme avec des stractes qui ont été obsolètes en C ++ 98, mais sont toujours une partie obligatoire de C ++ 20
Quel codage supposez-vous pour wstring?
Si vous utilisez STD :: String et imprimez-le sur la console, le terminal Linux (au moins sur Ubuntu), interpréter par défaut comme UTF-8.
@Darcy: Eh bien, cela est vrai si les paramètres régionaux actuels sont UTF-8, qui correspond à la défaillance des distributions Linux la plupart des dernières années, mais ce n'est pas garanti.
@DavidHeffernan: std :: wstring sur Linux est toujours utf-32 n'est-ce pas?