Newsgroup: it.comp.lang.visual-basic
Titolo: [NIUBBO] Problema con unicode

Mi scuso per la domanda da niubbo... ma magari mi potete evitare ore di 
googolate :)
Devo leggere una pagina html, parsare alcune info e metterle in delle celle 
excel.
Tutto ok, se non che alcune delle informazioni sono in unicode, con 
caratteri non standard.
Quello che ho fatto finora, aprendo il file con la normale open, leggendo il 
testo in una stringa e poi cercando quello che mi serve con la instr ed 
estraendolo con delle mid, va bene, per� laddove il testo di origine � in 
unicode tiro fuori una stringa priva di senso in quanto me la gestisce come 
ascii normale.
Come posso fare per tirare furi le stringhe in unicode?
Spero di essere stato abbastanza chiaro.
grazie a chi vorr� rispondermi
-- 
-- 
IlCapa

 Come posso fare per tirare furi le stringhe in unicode?
[cut]
Con quale linguaggio?
In VB6 non ci sono funzioni native efficaci (a parte strconv, che per� mi 
pare non converta da UTF-8, che � quello che troverai in HTML) per cui devi 
usare le funzioni MultiByteToWideChar/WideCharToMultiByte del kernel di 
windows il che richiede qualche riga di codice (non ti faccio un esempio 
perch� non so se ti serve).
In VB.net le stringhe sono gi� Unicode e potresti usarle come sono, se per� 
vuoi ci sono funzioni di alto livello per la conversione in 
System.Text.Encoding.Convert.
Stefano

 di
ok, provo a cercare qualcosa su queste e vedo cosa ne tiro fuori
grazie mille
-- 
IlCapa 

Prova questo:
http://tinyurl.com/nu8gq6
-- 
Ciao Fede
By Chicco Production
http://bcp.freetools.it


[cut]
Non conosco VBA ma se � abbastanza simile a VB puoi fare cos�:
1. dichiara le seguenti funzioni esterne e costanti:
Private Declare Function MultiByteToWideCharStr Lib "Kernel32.dll" Alias 
"MultiByteToWideChar" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal 
lpMultiByteStr As String, ByVal cbMultiByte As Long, ByVal lpWideCharStr As 
String, ByVal cchWideChar As Long) As Long
Private Declare Function WideCharToMultiByteStr Lib "Kernel32.dll" Alias 
"WideCharToMultiByte" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal 
lpWideCharStr As String, ByVal cchWideChar As Long, ByVal lpMultiByteStr As 
String, ByVal cbMultiByte As Long, ByVal lpDefaultChar As Long, ByRef 
lpUsedDefaultChar As Long) As Long
Private Const CP_UTF8 As Long = 65001
Private Const WC_DEFAULTCHAR As Long = &H40
2. usa questa funzione:
Public Function UTF8ToANSI(ByVal Buffer As String) As String
   Dim u As Long, bw As Long, bm As Long
   Dim wcstr As String, mbstr As String, dc As Long
   u = Len(Buffer)
   If u > 0 Then
      'calcola lo spazio richiesto per la conversione in Unicode con una 
prima chiamata
      bw = MultiByteToWideCharStr(CP_UTF8, 0&, Buffer, u, vbNullString, 0&)
      If (bw = 0) Then
         'errore: usa Err.LastDllError per verificare
         MsgBox SystemError(Err.LastDllError)
         UTF8ToANSI = vbNullChar
         Exit Function
      End If
      'alloca il buffer richiesto per la conversione in Unicode
      wcstr = String(bw * 2, Chr(0))
      'converte in unicode
      bw = MultiByteToWideCharStr(CP_UTF8, 0&, Buffer, u, wcstr, bw)
      If (bw = 0) Then
         'errore: usa Err.LastDllError per verificare
         MsgBox SystemError(Err.LastDllError)
         UTF8ToANSI = vbNullChar
         Exit Function
      End If
      'alloca il buffer necessario per la conversione in ANSI
      mbstr = String(bw * 2, Chr(0))
      'converte in ANSI
      bm = WideCharToMultiByteStr(1252, 0&, wcstr, bw, mbstr, bw, 0&, dc)
      If bm = 0 Then
         'errore: usa Err.LastDllError per verificare
         MsgBox SystemError(Err.LastDllError)
         UTF8ToANSI = vbNullChar
         Exit Function
      End If
      UTF8ToANSI = Left(mbstr, bm)
      If dc Then
         'il carattere di default � stato usato: vedi te
      End If
   Else
      UTF8ToANSI = ""
   End If
End Function
Ho testato il codice ma ovviamente in VB6.
Buona fortuna,
Stefano

 Non conosco VBA ma se � abbastanza simile a VB puoi fare cos�:
[cut]
Perfetto. Con un minimoa dattamento funziona in VBA.
Ti ringrazio tantissimo: � bello capire le cose, ma anche la pappa pronta fa 
soddisfazione ;)
Grazie ancora
-- 
IlCapa