Problème (ou incompréhension) avec la fonction StrConv (VB6)

Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 - 17 avril 2008 à 17:29
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 - 22 avril 2008 à 17:06
Bonjour,
J'internationalise actuellement un logiciel afin de pouvoir affiché l'ensemble des textes dans toutes les langues. Pour cela je stock les traductions de mes textes affiché en UTF-8. Je teste différentes méthodes pour affiché correctement ces texte (et de préférence ne pas avoir à remplacé les objets de mon appli, ce qui prendrais un temps considérable vue la quantité existante). Je pense que je vais finalement utilisé la fonction StrConv et paramétrer les polices de mes objet pour utilisé la table Ascii qui vas bien en fonction de la langue désiré.

J'ai par contre quelque problèmes avec cette dite fonction : StrConv
Un de mes test :
Dans une form mettre un textbox (de base) et un bouton.
Ajouté le code :
------------------------------------------------------------------------------------------------------------------------->8
Private Sub Command1_Click()
    Text1.Font.Charset = 204
    Text1.Text = StrConv("t" & Chr(0) & "o" & Chr(0) & "t" & Chr(0) & "o" & Chr(0) & " " & Chr(0) & ChrW(1046) & Chr(0) & ChrW(1046) & Chr(0) & ChrW(1046) & Chr(0) & ChrW(1046) & Chr(0) & ChrW(1046) & Chr(0) & ChrW(1046) & Chr(0) & ChrW(1046) & Chr(0), vbFromUnicode, 25)
    Text1.Text = Text1.Text & "|"
    Text1.Text = Text1.Text & StrConv("t" & "o" & "t" & "o" & " " & ChrW(1046) & ChrW(1046) & ChrW(1046) & ChrW(1046) & ChrW(1046) & ChrW(1046) & ChrW(1046), vbFromUnicode, 25)
End Sub

8<-------------------------------------------------------------------------------------------------------------------------
Quand on click sur le bouton on vois s'afficher dans le textbox : "toto ???????|??????"

1èr problèmes :
    Pourquoi suis-je obligé de mettre un 'chr(0)' entre chaqu'un des caractères de ma chaine pour que l'affichage (ce serais plutôt la conversion que je mettrais en doute en faite) sa fasse bien ? (ce qui pourrais fortement ralentir la traduction par la suite)

2ème problèmes :
    Je modifie les "Options régionales et linguistiques" dans Windows et met dans "Langue pour les programmes non Unicode" (dernier onglets) la valeur "Russe". Je re-démarre. L'affichage ne fonctionne plus (il ne s'affiche plus que des ? et aucun ?) ????? (par contre si je fait directement "Text1.Text = ChrW(1046)" Le caractère s'affiche bien . Heeee J'aimerais bien que le fonctionnement ou non de mon appli ne dépende pas des paramètres Windows. Je me vois mal annoncé à un client "Ça ne fonctionne pas.... C'est normal configuré votre machine en Français-France".......

3ème problèmes :
->    Je met la valeur 204 dans le charset du font de mon textbox. J'ai trouvé cette valeur en changeant dans le design le Script en Cyrillique. Pour finir un "?Text1.Font.Charset" dans la fenêtre d'exécution pour trouvé la valeur 204. Je n'arrive pas à trouvé une liste précise et complètes de la valeur de Charset.
->   Dans StrConv j'envoie en dernier paramètre la valeur 25. J'ai trouvé cette valeur grâce à un autre projet aillant pour but de tester des objets. Même problème : Je n'arrive pas à trouvé une liste précise et complètes des valeur à envoilé à StrConv pour convertir vers de ISO-8859-1 ou ISO-8859-5.

Merci par avance
Amicalement
Pensez "Réponse acceptée"

9 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
18 avril 2008 à 02:54
quelques liens de la MSDN:

"Developing International Software"
http://msdn2.microsoft.com/en-us/library/aa163290.aspx

liste des Charsets:
http://msdn2.microsoft.com/en-us/library/cc194829.aspx
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
18 avril 2008 à 03:14
cela dit, j'ai fait

Private Sub Command1_Click()
Dim i As Long
Text1.Font.Charset = 204
For i = 127 To 255
Text1.Text = Text1.Text & Chr$(i)
Next i
End Sub

et on ne voit pas tous les caractères cyrilliques... ca passera pas, cette solution.
te faut des controles qui gèrent le Unicode, y'a pas a tortiller...
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
18 avril 2008 à 11:06
Merci pour les liens (j'y vais tout de suite)

Heeee par contre je viens de faire le même test que toi et tout les caractères cyrilliques s'affiche bien ??? Peut être du à un jeu de caractère manquant sur ton Windows ???

Il y à effectivement quelque variance en fonction de la police mais sur des symboles et non sur les lettre :

Mais je confirme bien que tout les carac s'affiche bien (cher moi en tout cas) (J'ai trouvé l'alphabet cyrillique ici)

Je continue donc mes tests dans ce sens.

Merci Renfield pour tout ces coups de mains que tu peut me donné (et j'imagine que je ne suis pas le seul que tu aide)

PS :
3H00 du matin ??? Tu est insomniaque pour aidé les Codes-Sourcesiens et Codes-Sourcesiennes à cette heure ????
En même temps je ne vais quand même pas me plaindre

Amicalement
Pensez "Réponse acceptée"
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
18 avril 2008 à 11:30
je vois pas tes images, elles sont périmées
mais si cet Ascii etendu te suffit, y'a plus de soucis, plus de Strconv, de Chrw....

Et oui, quelques heures de sommeil me suffisent souvent... ca donne du temps libre ^^
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
18 avril 2008 à 12:18
^^ Pratique
Bon je repost mes images
variance en fonction de la police :

tout les carac s'affiche bien :

Oui cette ascii étendu me suffit (tout du moins à première vue) mais je sauvegarde les données en UTF-8 donc besoin de StrConv (à moins de modifier la façon dont je sauvegarde mes données ?????? Pourquoi pas remarque je vais y pensé )
En espérant que mes images ne se périme pas aussi vite cette foi

Amicalement
Pensez "Réponse acceptée"
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
18 avril 2008 à 14:33
Mes recherche / Test avance un peut (un peut seulement). J'ai trouvé sur Wiki les jeux de caractéres UNICODE. ici
Sa me fait me dire que les 9 premier octect permete de savoir dans quel codage mon caractére se trouve.
Donc en fesant "Val(ascw(Carac) / 127)" Je sait dans quel code ASCII le caractère se trouve.
Reste à faire "ascw(Carac) mod 127" pour savoir quel caractère dans ce codage dois être affiché...
Je test qq fonctions (faite pour le moment en VB mais je pense que il vaudrais mieu pour avoir une vitesse d'execution supportable que je la/les reffaces par la suite en C et que je crée un dll contenant cette/ces fonction/s. Dé la fin de mes tests je post mes fonctions
Amicalement
Pensez "Réponse acceptée"
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
21 avril 2008 à 11:05
Plus j'avance dans cette direction et plus je me rend compte qu'il y à du développement à faire pour avoir le fonctionement que je veut. Je n'abandonne pas encore l'idée mais je commence à me posé la question sur ce qui sera le plus rapide et propre pour faire mon affichage....
Exemple d'une chaine toute bête et portant bien galère :
"J'ai dépancé mes 15?"
"J'ai d" -> ASCII standard
"é" -> supplément latin-1
"panc" -> ASCII standard
"é" -> supplément latin-1
" mes 15" -> ASCII standard
"?" -> Symboles monétaires (Valeur 0x20AC en UTF8)
Donc dans cette chaine à l'allure toute bête se cache en faite 3 jeux de caractères différant (on pourrais dire 2 vue qu'il y à de ASCII standard) mais quel jeux de caractères me retournera ma fonction de détection du charset ?

En gros je suis en train de me dire que Renfied à raison de dire qu'il n'y à pas à tortiller...

Amicalement
Pensez "Réponse acceptée"
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
21 avril 2008 à 11:23
Heeeeee j'oubliais :


le caractère "?" à effectivement la valeur 0x20AC
en UTF8 mais ce n'est même pas la valeur réellement codé dans les octets (voir
UTF-8 sur Wiki ici) en réalité la valeur des octets est : "11100010
10000010 10101100" en binaire soit E2 82 AC en hexa ou 14844588 en
décimal.... En gros pas si simple à décodé...http://fr.wikipedia.org/wiki/Utf8




Amicalement



Pensez "Réponse acceptée"
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
22 avril 2008 à 17:06
J'ai complétement lésser tombé cette idée. Mais pas l'affichage international. Voir ici pour connaitre la solmution que je choisie
Amicalement
Pensez "Réponse acceptée"
0
Rejoignez-nous