sorcier_VB
Messages postés12Date d'inscriptionmardi 2 novembre 2004StatutMembreDernière intervention 3 mars 2006
-
22 nov. 2005 à 20:07
mkm570
Messages postés1Date d'inscriptionsamedi 15 février 2003StatutMembreDerniè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
ciberrique
Messages postés589Date d'inscriptionlundi 25 août 2003StatutMembreDernière intervention18 juillet 20101 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.
mkm570
Messages postés1Date d'inscriptionsamedi 15 février 2003StatutMembreDerniè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