Prob de lecture des chaînes en unicodes

sorcier_VB Messages postés 12 Date d'inscription mardi 2 novembre 2004 Statut Membre Dernière intervention 3 mars 2006 - 22 nov. 2005 à 20:07
mkm570 Messages postés 1 Date d'inscription samedi 15 février 2003 Statut Membre Dernière intervention 2 avril 2006 - 2 avril 2006 à 15:47
j'ai écris un petit prog qui sert à récuperer des informations précies
sur une page web, mais cette page est codé en UTF-8, j'ai utilisé
WINSOCK pour récuperer ces informations et le sauvegarder en ficher
HTML, mais le résultat est bizzard, la plus part des infomations sont
correctes mais certaines signes spéciaux comme:é ç à ect sont mal
affichés ou n'affichent pas.





je pense c'est un problème de lecture et recodage de UNICODE, qui a une idée?





- comment faire sauvegarder des informations en UNICODE tell qu'il est?? MERCI

4 réponses

ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
22 nov. 2005 à 23:14
Winsock récupére les données, cependant si tu les enregistres dans une variable string alors ton unicode ne sera pas recodé ascii, dans ce cas tu dois faire une traduction des caractéres spéciaux toi meme. Autrement tu peux récupérer les bytes de la page web et seulement recréer le fichier sur ton pc, dans ce cas l'unicode devrait fonctionnner.
0
Egyde Messages postés 158 Date d'inscription lundi 17 mai 2004 Statut Membre Dernière intervention 16 juillet 2007
23 nov. 2005 à 12:59
Pour la liste des caractères spéciaux en HTML :

http://www.commentcamarche.net/html/htmlcarac.php3
0
sorcier_VB Messages postés 12 Date d'inscription mardi 2 novembre 2004 Statut Membre Dernière intervention 3 mars 2006
24 nov. 2005 à 19:41
Merci Egyde,mais cela ne resoud pas mon probleme car c pas a cause le CODE HTML, c le UNICODE, mais merci tjs. :-)
0
mkm570 Messages postés 1 Date d'inscription samedi 15 février 2003 Statut Membre Dernière intervention 2 avril 2006
2 avril 2006 à 15:47
Il existe une différence entre UTF-8 et Unicode. Les codes des caractéres sont les mêmes mais la représentation différe. Utf-8 utilise 1 à 4(ou même 6) octets alors qu'Unicode utilise 2 octets pour un caractère. Le code suivant permet de transformer une chaîne représentée en UTF-8 en une representée en ANSI.
La seule fonction utile est Convert.
Cette version se limite à un caractère representé en 3 octets.


Private Function UTF8_2(V1 As Integer, V2 As Integer) As Integer
'Cette fonction permet de retourner la valeur décimale d'un caractére
'en UTF-8 codé sur 2 octets; pour mieux comprendre le codage UTF-8,
'il faut se référer à une documentation bien appropriée.
Dim Q%, R%
Dim exp%, i%
Dim Res$
Dim VAL%
'On convertit les chiffres en binaire
Q = V2
While Q <> 0
R = Q Mod 2
Res = CStr(R) & Res
Q = Q \ 2
Wend
Q = V1
While Q <> 0
R = Q Mod 2
Res = CStr(R) & Res
Q = Q \ 2
Wend
'on supprime les deux bits de poids forts des deux octets
Res = Mid(Res, 3, 6) & Mid(Res, 11, 6)
'on reconvertit cette chaine binaire en un nombre décimal
exp = 0
For i = Len(Res) To 1 Step -1
R = CInt(Mid(Res, i, 1))
VAL = VAL + (R * (2 ^ exp))
exp = exp + 1
Next i
UTF8_2 = VAL
End Function

Function Convert(chaine As String) As String
Dim i%
Dim code1%, code2%, code3%
Dim VAL&
Dim Res$, ch$
i = 1
While (i <= Len(chaine))
ch = Mid(chaine, i, 1)
code1 = Asc(ch)
If code1 <= 127 Then
Res = Res & ch
ElseIf code1 <= 223 Then
i = i + 1
code2 = Asc(Mid(chaine, i, 1))
VAL = UTF8_2(code1, code2)
Res = Res & ChrW(VAL)
Else
i = i + 1
code2 = Asc(Mid(chaine, i, 1))
i = i + 1
code3 = Asc(Mid(chaine, i, 1))
VAL = UTF8_3(code1, code2, code3)
Res = Res & ChrW(VAL)
End If
i = i + 1
Wend
Convert = Res
End Function

Private Function UTF8_3(V1 As Integer, V2 As Integer, V3 As Integer) As Long
'Cette fonction permet de retourner la valeur décimale d'un caractére
'en UTF-8 codé sur 3 octets; pour mieux comprendre le codage UTF-8,
'il faut se référer à une documentation bien appropriée.
Dim Q%, R%
Dim exp%, i%
Dim Res$
Dim VAL&
'On convertit les chiffres en binaire
Q = V3
While Q <> 0
R = Q Mod 2
Res = CStr(R) & Res
Q = Q \ 2
Wend
Q = V2
While Q <> 0
R = Q Mod 2
Res = CStr(R) & Res
Q = Q \ 2
Wend
Q = V1
While Q <> 0
R = Q Mod 2
Res = CStr(R) & Res
Q = Q \ 2
Wend
'on supprime les deux bits de poids forts des trois octets
Res = Mid(Res, 5, 4) & Mid(Res, 11, 6) & Mid(Res, 19, 6)
'on reconvertit cette chaine binaire en un nombre décimal
exp = 0
For i = Len(Res) To 1 Step -1
R = CInt(Mid(Res, i, 1))
VAL = VAL + (R * (2 ^ exp))
exp = exp + 1
Next i
UTF8_3 = VAL
End Function
0
Rejoignez-nous