19/02/2025 - Frankq ha scritto:
Visual Studio codifica UTF16 mentre SQLite memorizza i dati in UTF8. Questa routine converte le stringhe da UTF16 a UTF8. Vedi il mio post precedente
Visual Studio non "codifica" nulla, al massimo è il runtime di .NET che salva le stringhe in memoria utilizzando l'encoding UTF-16.
Detto questo, di fatto la tua conversione (di cui non mi sembra di aver visto il codice) prende un System.String e restituisce un System.String, quindi prendendo in esame il codice originale qui di seguito
Dim codUTF8 As String = UTF16toUTF8(tempcod) ' converte da UTF16 a UTF8
la variabile codUTF8 è ancora in UTF-16.
Quando la passi come valore al parametro richiesto dalla query con questa riga
comando.Parameters.AddWithValue("@cerca", "%" & codUTF8 & "%")
stai sempre concatenando stringhe "letterali" UTF-16 con una variabile (codUTF8) che è un riferimento a un buffer che contiene una stringa UTF-16, poiché questo è il formato che .NET usa in memoria per rappresentare stringhe, salvo ove diversamente specificato.
Se SQLite si attende un encoding diverso, è il driver di accesso ai dati che essendo consapevole di questa condizione trasforma la stringa originale UTF-16 nell'encoding desiderato (UTF-8), ma tu non devi fare nulla.
Sarebbe interessante vedere cosa fa quella funzione "UTF16toUTF8" perché, per i motivi sopra e a meno che non abbia tralasciato qualcosa, si direbbe del tutto superflua e probabilmente inefficace, da cui la mia curiosità iniziale. Ipotizzo che magari sia un refuso di codice di esempio proveniente da qualche suggerimento di ChatGPT (o affine) e preso "così com'è" senza le dovute verifiche.
Ciao! :)