Bonjour je cherche une petite fonction testée permettant de convertir de l'utf8 en ASCII Uppercase
Avez-vous déja rencontré cela ?
Merci
Bonjour je cherche une petite fonction testée permettant de convertir de l'utf8 en ASCII Uppercase
Avez-vous déja rencontré cela ?
Merci
Les fonctions à utiliser seront mbtowc et toupper. La manière d'utiliser la première varie en fonction du système d'exploitation et du compilateur. Quel OS et quel compilateur utilises-tu donc ?
Salut
J'utilise VS 6.0.
J'ai trouvé mbtowc que je ne connaissais pas.
Maintenant comment faire pour l'utiliser ?
J'ai une chaine exemple : comment faire pour detecter la présence d'un caractère multi-byte et sa longueur pour le convertir ?
Mühldorf am Inn, gemeindefreies Gebiet
En fait je pense que ce n'est pas de l'utf8 mais du MBCS
M<195><188>hldorf am Inn, gemeindefreies Gebiet
La version de mbstowcs de Visual ne supporte pas l'UTF-8, tu devras faire appel à l'API Windows, à savoir à la fonction MultiByteToWideChar. Cette fonction permet d'encoder une chaîne de caractères en UTF-16 (wide character string), l'encodage natif de Windows.
Ce programme affiche "Mühldorf am Inn, gemeindefreies Gebiet" (premier MessageBox) ensuite la même phrase en lettres capitales (deuxième MessageBox).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #include <stdio.h> #include <windows.h> int main() { const char * buf = "Mühldorf am Inn, gemeindefreies Gebiet"; wchar_t outbuf[100]; MultiByteToWideChar(CP_UTF8, 0, buf, -1, outbuf, sizeof(outbuf) / sizeof(outbuf[0])); MessageBoxW(NULL, outbuf, L"Message", 0); CharUpperBuffW(outbuf, sizeof(outbuf) / sizeof(outbuf[0])); MessageBoxW(NULL, outbuf, L"Message", 0); return 0; }
Une chaîne UTF-8 est un MBCS .En fait je pense que ce n'est pas de l'utf8 mais du MBCS
Merci melem
Je vais essayer cela
Meci melem
Ca fonctionne "presque"
- Mon app est en console donc j'ai du inclure windows.h "de force", mais pas de problème
- Le resultat est en integer que j'aimerais convertir en ANSI : tu sais comment ? (a part faire un boucle sur chaque element)
- La methode CharUpperBuffW(outbuf, sizeof(outbuf)); ne rends pas un vrai code ASCII Majuscule (A-Z) je vais donc utiliser une table de conversion mais j'ai l'habitude, le plus important c'etait l'utilisation de MultiByteToWideChar pour transformer cet utf-8
Je ne comprends pas.Mon app est en console donc j'ai du inclure windows.h "de force"
Utilise wcstombs.Le resultat est en integer que j'aimerais convertir en ANSI : tu sais comment ? (a part faire un boucle sur chaque element)
D'ailleurs en pasant, il faut que tu changes tout les sizeof(buffer) précédents en sizeof(buffer) / sizeof(buffer[0]). C'étaient de grosses erreurs de ma part.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 const wchar * widestring = L"Mühldorf am Inn, gemeindefreies Gebiet"; char ansistring buf[100]; wcstombs(ansistring, widestring, sizeof(ansistring) / sizeof(ansistring[0])); CharUpperBuffA(ansistring, sizeof(ansistring) / sizeof(ansistring[0]))
Merci pour ton aide précieuse melem
je vais pouvoir travailler avec cela
Le petit bemol pour windows.h c'est qu'a l'avenir je voudrais aussi compiler sous linux et que focément je devrais utiliser d'autres methodes (et je trouve que la librairie lconv est un mamouth pour faire cela)
Mais dans l'immediat tes suggestions m'aident beaucoup
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager