Convertion des caractères accentués et autres ?

cedrigoler
Messages postés
35
Date d'inscription
mercredi 17 juillet 2002
Statut
Membre
Dernière intervention
6 mai 2005
- 10 juil. 2004 à 10:24
CGSI3
Messages postés
416
Date d'inscription
vendredi 22 février 2008
Statut
Membre
Dernière intervention
7 janvier 2018
- 11 sept. 2012 à 22:48
BOnjour !
Vous avez surement deja vu les nombreuses sources de recherche sur google qui fonction de la maniere suivante "http://www.google.fr/search?q= " & text1 ... Ils ont tous ce pb : dès que le text1 comporte par exemple un caractère accentué comme "é" ou d'autres caractères comme un "+", google ou toute autre site ne le reconnait pas. Essayé daller sur http://www.google.fr/search?q=école pour comprendre. On remarque que dans la barre d'adresse le caractère "é" est remplacé par %E9. Mais aller a http://www.google.fr/search?q=%E9cole provoque le même problème.
Par contre en saisissant "école" dans la zone de recherche de google, le caractère "é" se trouve sous la forme %C3%A9 dans la barre d'adresse et la ça fonctionne si on va a l'adresse http://www.google.fr/search?q =%C3%A9cole.
Donc comment faire cette convertion des caractère spéciaux ?

9 réponses

BruNews
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
10 juil. 2004 à 11:16
ben tu l'as la conversion:
% suivi du code hexa.

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_Jack
Messages postés
14007
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
78
10 juil. 2004 à 14:56
Salut cedrigoler
Pour être plus précis, le code hexa d'un caractère se retrouve avec ceci :
CodeHexa = Hex(Asc("é"))
auquel il faudra ajouter le % devant dans ta chaîne.
Vala
Jack
0
cs_Jack
Messages postés
14007
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
78
10 juil. 2004 à 14:57
... et bien sûr, pour faire l'inverse et récupérer ton caractère à partir du code hexa, il suffit de faire :
MonCaractère = Chr(Val("&h" & CodeHexa))
Vala
Jack
0
cedrigoler
Messages postés
35
Date d'inscription
mercredi 17 juillet 2002
Statut
Membre
Dernière intervention
6 mai 2005

10 juil. 2004 à 15:23
Justement cela ne semble par être de l'hexa.
Exemple :
MsgBox "%" & Hex(Asc("é"))
--> ça affiche "%E9"
Et ce que je cherche a avoir comme résultat c'est %C3%A9 (qui est bel et bien reconnu comme étant le caractère "é" en allant à ladresse http://www.google.fr/search?q=%C3%A9cole)
Quel format est-il donc utilisé ?!
0

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

Posez votre question
cs_CanisLupus
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Membre
Dernière intervention
13 mars 2006
18
10 juil. 2004 à 17:19
Salut,

C de l'unicode.
En basic latin, %e9 c bien "é". %c3%a9 doit être une autre représentation.

Va voir à cette adresse :

http://www.alanwood.net/unicode/

Cordialement

CanisLupus
0
cedrigoler
Messages postés
35
Date d'inscription
mercredi 17 juillet 2002
Statut
Membre
Dernière intervention
6 mai 2005

10 juil. 2004 à 18:55
Merci pour ton lien Canislupus mais il ne m'a pas permit de resoudre mon pb !

Pour le moment voici ma méthode "bourin" :

Text1 = LCase(Text1)
For i = 1 To Len(Text1)
cara = Mid(Text1, i, 1)
If cara <> "é" And cara <> "è" And cara <> "à" And cara <> "ù" And cara <> "ñ" And cara <> "â" And cara <> "ê" And cara <> "î" And cara <> "ô" And cara <> "û" And cara <> "ä" And cara <> "ë" And cara <> "ï" And cara <> "ö" And cara <> "ü" Then
temptxt = temptxt & "%" & Hex(Asc(cara))
Else
   cara = Replace(cara, "é", "%C3%A9")
   cara = Replace(cara, "è", "%C3%A8")
   cara = Replace(cara, "à", "%C3%A0")
   cara = Replace(cara, "ù", "%C3%B9")
   cara = Replace(cara, "ñ", "%C3%B1")
   cara = Replace(cara, "â", "%C3%A2")
   cara = Replace(cara, "ê", "%C3%AA")
   cara = Replace(cara, "î", "%C3%AE")
   cara = Replace(cara, "ô", "%C3%B4")
   cara = Replace(cara, "û", "%C3%BB")
   cara = Replace(cara, "ä", "%C3%A4")
   cara = Replace(cara, "ë", "%C3%AB")
   cara = Replace(cara, "ï", "%C3%AF")
   cara = Replace(cara, "ö", "%C3%B6")
   cara = Replace(cara, "ü", "%C3%BC")
   temptxt = temptxt & cara
End If
Next i


J'ai en effet remarqué que certain caractère comme le signe "+" est bien converti en hexa par google, ce qui n'est pas le cas des caractères accentués. La liste des replace n'est surement pas encore exaustive ! Pour explication du code : chaque caractère sil n'est pas un caractère accentué est remplacé par son code hexa et s'il l'est alors on le remplace par son format "google".

Autre question :
Comment simplifier cette liste de replace ? Je pensais a une methode type php mais qui ne fonctionne pas en vb :
orig = Array("é", "è", "à")
donn = Array("%C3%A9", "%C3%A8", "%C3%A0")
Text1 = Replace(Text1, orig, donn) 
0
cs_CanisLupus
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Membre
Dernière intervention
13 mars 2006
18
13 juil. 2004 à 20:22
Ben pour l'instant ta méthode "bourin" me parait fiable quoiqu'il faille tenir compte de tous les caractères accentués et autres.

G pas de méthode simple pour l'instant. Une autre adresse qui peut te permettre d'être un peu plus exhaustif :

http://www.cybwarrior.com/articles/read.php?id=9

Comme ton prob m'intéresse aussi, g cherché un peu avec google mais g rien vu de plus simple que ta méthode en vb.

Pour ton autre question, pour simplifier, tu peux coder :
Dim orig As Variant
Dim donn As Variant
Dim i As Integer

orig = Array("é", "è", "à")
donn = Array("%C3%A9", "%C3%A8", "%C3%A0")

For i = LBound(orig) To UBound(orig)
text1 = Replace(text1, orig(i), donn(i))
Next

A condition que orig et donn aient la même taille et que chaque entrées correspondent.

Cordialement

CanisLupus
0
cs_CanisLupus
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Membre
Dernière intervention
13 mars 2006
18
14 juil. 2004 à 17:03
Salut,

S'il ne s'agit que des caractères accentués, je suis tombé sur cette page :
http://www.allhtml.com/html/html7.php
G remarqué que ces caractères allaient de 192 à 255 (en décimal) ou C0 à FF (en hexa).
Donc, à partir de là, on peut en déduire une méthode simple de conversion char par char.
Le dernier prob est que le "é" vaut "%E9" et non pas "%C3%A9".
D'après ce que g pu voir les 2 sont reconnus quoique je ne sais pas pourquoi pour "%C3%A9". Si quelqu'un peut m'éclairer...
Maintenant, si tu veux traduire un texte dans la 2ème représentation, teste ça :

Private Sub Form_Load()
Dim s As String
Dim s1 As String
Dim i As Integer
Dim c As String

s = "éèàABC"

For i = 1 To Len(s)
c = Mid$(s, i, 1)
If Asc(c) > 191 Then
s1 = s1 & "%C3%" & Hex(Asc(c) - 64)
Else
s1 = s1 & c
End If
Next

MsgBox s1

End Sub

Ca sera ptete plus élégant.

Bonne prog

Cordialement

CanisLupus
0
CGSI3
Messages postés
416
Date d'inscription
vendredi 22 février 2008
Statut
Membre
Dernière intervention
7 janvier 2018
1
11 sept. 2012 à 22:48
Bonsoir,

Fonction a essayer:

Public Function StrWithoutAccent(ByRef chaine As String) As String
Dim objBytes() As Byte = System.Text.Encoding.GetEncoding(1251).GetBytes(chaine)
Return System.Text.Encoding.ASCII.GetString(objBytes)
End Function

Cordialement
0