Italian B4J - Perdita valore carattere anche se codifica ok

micro

Well-Known Member
Licensed User
Longtime User
Salve ragazzi
una veloce descrizione per il problema che espongo relativo al carattere '€'
Ho un DB mysql con codifica utf8_unicode
la connessione in pool inoltre la faccio specificando ulteriormenete la codifica
pool.Initialize("com.mysql.jdbc.Driver", setupc.mapset.Get("txtstringamysql") & "?characterEncoding=utf8&useUnicode=true", setupc.mapset.Get("txtusermysql"), setupc.mapset.Get("txtpassmysql"))
In questo DB ho una tabella con un campo BLOB in cui salvo una map (con struttura json) che contiene diverse key tra cui la key 'valuta' con il suo valore che è appunto '€'
Se apro phpmyadmin e consulto il campo vedo correttamente il simbolo '€'
Quando invece devo prelevare i dati con una query per riversarli in una Tableview quel carattere viene perso, infatti mettendomi in debug man mano che leggo i valori dall'oggetto
ResultSet ritovo il carattere cambiato.
La sub classica di DBUtils (leggermente cambiata solo per la gestione dei campi 'DATA')
Public Sub ExecuteTableView(SQL As SQL, Query As String, StringArgs() As String, Limit As Int, _
TableView1 As TableView)
TableView1.Items.Clear
Dim cur As ResultSet
If StringArgs = Null Then
Dim StringArgs(0) As String
End If
cur = SQL.ExecQuery2(Query, StringArgs)
Dim cols As List
cols.Initialize
For i = 0 To cur.ColumnCount - 1
cols.Add(cur.GetColumnName(i))
Next
TableView1.SetColumns(cols)
Do While cur.NextRow
Dim values(cur.ColumnCount) As String
For col = 0 To cur.ColumnCount - 1
values(col) = cur.GetString2(col)
If cur.GetColumnName(col).ToUpperCase.StartsWith("DATA") Then
values(col) = DateFormat(False, values(col))
End If
Next
TableView1.Items.Add(values)
If Limit > 0 And TableView1.Items.Size >= Limit Then Exit
Loop
cur.Close
End Sub
Dove può essere il problema?
Grazie e Buona domenica.
 

Star-Dust

Expert
Licensed User
Longtime User
Sembra un problema di codifica.
Prova con:
pool.Initialize("com.mysql.jdbc.Driver", setupc.mapset.Get("txtstringamysql") & "?characterEncoding=utf8&useUnicode=false", setupc.mapset.Get("txtusermysql"), setupc.mapset.Get("txtpassmysql"))
 

Star-Dust

Expert
Licensed User
Longtime User
Grazie star
Nulla, stesso problema.
Sul DB ok ma in lettura come già detto il carattere è già cambiato
Passa tutto a WINDOWS-1252 oppure altro formato. Probabilmente il server quando ti invia i dati lo fa in un formato diverso rispetto al formato di memorizzazione.
 

micro

Well-Known Member
Licensed User
Longtime User
Passa tutto a WINDOWS-1252 oppure altro formato. Probabilmente il server quando ti invia i dati lo fa in un formato diverso rispetto al formato di memorizzazione.
Tempo fa risolsi con questo formato in ricezione da un PLC, altrimenti non c'era verso ma qui continuo ad avere problemi.
Aggiunto nella connessione pool la codifica, il carattere inteso come visualizzazione è cambiato ma il simbolo dell'euro continua
a non apparire anche se comunque il codice chr è quello che dovrebbe rappresentare l'euro
Infatti se faccio
Asc(valore)
ottengo 128

1589118158279.png
 

Star-Dust

Expert
Licensed User
Longtime User
@micro non so se ti possa essere utile Link
Io se non ricordo male ho risolto in un applicazione, che leggendo i dati dalla query php in formato Windows-1252.
B4X:
j.Initialize("", Me)
j.Download(Addr)
Wait For (j) JobDone(j As HttpJob)

'Log(j.GetString)
log(j.GetString2("windows-1252"))
 
Last edited:

micro

Well-Known Member
Licensed User
Longtime User
Grazie a tutti per l'aiuto, appena posso mi rimetto a provare.
Nel tuo caso star stai usando il protocollo http, ma io non uso questa modalità in lettura dal db.
Ancora grazie per l'interessamento e buona giornata a tutti.
 
Top