Newsgroup: it.comp.appl.access
Titolo: codificare il testo in unicode UTF-8

buongiorno a tutti ho trovato su un sito questa funzione che trasforma in carattere unicode i caratteri ascii credo però che per utilizzarla devo applicare questa funzione a ogni carattere di una stringa
 
esempio: "domani lunedì sarà una bella giornata"
 
come posso scorrere tutti i caratteri della stringa e applicare a ogni carattere questa funzione in modo che ottengo la stessa stringa codificata in UTF-8? grazie.
 
*** CODE ****
 
Public Function tlhAsciiToUtf8(ByRef strText As String) As String
    Dim hexString As Long
    Dim newval As Long
    hexString = Val("&h" & strText)
    If hexString <= 127 Then
      tlhAsciiToUtf8 = "%" & strText
    ElseIf hexString <= 191 Then
      tlhAsciiToUtf8 = "%C2%" & strText
    ElseIf hexString <= 255 Then
      newval = 49856 + hexString
      tlhAsciiToUtf8 = "%" & Mid(Hex(newval), 1, 2) & "%" & Mid(Hex(newval), 3, 2)
    'Else
     ' MsgBox ("NON ASCII CHARACTER: " & hexString)
    End If
End Function

Mi pare ci sia un'API che fa tutto... 
 
Prova a vedere quì:
https://www.di-mgt.com.au/howto-convert-vba-unicode-to-utf8.html
 
https://stackoverflow.com/questions/23810324/vba-convert-string-to-unicode
 
 
Prova a vedere anche ADO.Stream... vado a memoria...
 
@Alex


Se devi 'scorrere' la stringa basta che fai un ciclo dentro al quale 
'osservi' dal primo all'ultimo carattere della stringa stessa
Non l'ho provata ma dovrebbe funzionare, occhio al count che finisca 
giusto (alla lunghezza della stringa)
---------------------------------------------
stringa = "peppo pippa puppa"
 
For count = 1 To Len(stringa)
    Debug.Print Mid$(stringa, count, 1)
    Next count
---------------------------------------------
E Ciao


E la Parte UNICODE...? mi sa che ti è scappato qualche cosa...
 
@Alex


Veramente ho mostrato solo uno dei modi di scorrere ogni carattere della 
stringa sorgente
Poi, il 'cosa' ci si faccia su ogni carattere e' compito del richiedente
Al posto del mio debug.print potrebbe eseguire una roba del tipo
 
str_dest = str_dest & tlhAsciiToUtf8(Mid$(stringa, count, 1))


se servisse a qualcuno ho risolto cosi
 
ho inserito il codice seguente in un modulo e poi ho richiamato
URLEncode(miavariabilestringa)
 
se miavariabilestringa contiene per esempio "ciao a tutti à è ì ò ù"
questa funzione converte in UTF8 le ultime 5 vocali accentate
 
 
**** codice ****
 
Private Const CP_UTF8 = 65001
Private Declare Function WideCharToMultiByte Lib "Kernel32" (ByVal CodePage As Long, ByVal dwflags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpDefaultChar As Long, ByVal lpUsedDefaultChar As Long) As Long
 
 
Public Function UTF16To8(ByVal UTF16 As String) As String
Dim sBuffer As String
Dim lLength As Long
If UTF16 <> "" Then
    lLength = WideCharToMultiByte(CP_UTF8, 0, StrPtr(UTF16), -1, 0, 0, 0, 0)
    sBuffer = Space$(lLength)
    lLength = WideCharToMultiByte(CP_UTF8, 0, StrPtr(UTF16), -1, StrPtr(sBuffer), Len(sBuffer), 0, 0)
    sBuffer = StrConv(sBuffer, vbUnicode)
    UTF16To8 = Left$(sBuffer, lLength - 1)
Else
    UTF16To8 = ""
End If
End Function
 
 
 
Public Function URLEncode( _
   StringVal As String, _
   Optional SpaceAsPlus As Boolean = False, _
   Optional UTF8Encode As Boolean = True _
) As String
 
Dim StringValCopy As String: StringValCopy = IIf(UTF8Encode, UTF16To8(StringVal), StringVal)
Dim StringLen As Long: StringLen = Len(StringValCopy)
 
If StringLen > 0 Then
    ReDim Result(StringLen) As String
    Dim I As Long, CharCode As Integer
    Dim Char As String, Space As String
 
  If SpaceAsPlus Then Space = "+" Else Space = "%20"
 
  For I = 1 To StringLen
    Char = Mid$(StringValCopy, I, 1)
    CharCode = Asc(Char)
    Select Case CharCode
      Case 97 To 122, 65 To 90, 48 To 57, 45, 46, 95, 126
        Result(I) = Char
      Case 32
        Result(I) = Space
      Case 0 To 15
        Result(I) = "%0" & Hex(CharCode)
      Case Else
        Result(I) = "%" & Hex(CharCode)
    End Select
  Next I
  URLEncode = Join(Result, "")
 
End If
End Function
 
 
**** fine codice ****