Italian community of Lazarus and Free Pascal

Programmazione => Databases => Topic aperto da: mimmolazzaro - Aprile 20, 2013, 06:42:45 pm

Titolo: [RISOLTO + ADDENDUM] Charset e Firebird
Inserito da: mimmolazzaro - Aprile 20, 2013, 06:42:45 pm
Salute a tutti!
Qui il nuovo problema:
Sto usando un DB Firebird, Charset None e campi VARCHAR ISO8859_1 ma ho dei problemi con le accentate.
Se inserisco un'accentata, mettiamo ù, in un controllo a runtime, me lo ritrovo in IBExpert come ù.
Viceversa, se inserisco ù in ambiente IBExpert, nei controlli Firebird a runtime non la vedo proprio.
Il guaio è che molti dati li acquisisco dal web; questi vengono correttamente riportati in database ma, quando li voglio visualizzare, le accentate spariscono.

Ho provato a metterci ISO8859_1 nella proprietà Charset di IBConnection, ma il programma crasha miseramente. Se metto invece UTF8, il programma parte e visualizzo bene le accentate ma  guai a inserire nuovi dati... nuovo crash!

Spero di aver esposto sufficientemente il problema.
Che si fa in questi casi?

Datemi delle buone notizie (come al solito), per favore.  :'(
Titolo: Re:Charset e Firebird
Inserito da: bonmario - Aprile 20, 2013, 07:43:55 pm
Ciao,
non so rispondere alla tua domanda, però tieni conto che l'interfaccia dei programmi compilati con Lazarus da un po' di tempo a questa parte è completamente UTF8.

Ciao, Mario
Titolo: Re:Charset e Firebird
Inserito da: mimmolazzaro - Aprile 22, 2013, 09:34:42 am
non so rispondere alla tua domanda, però tieni conto che l'interfaccia dei programmi compilati con Lazarus da un po' di tempo a questa parte è completamente UTF8.

Grazie Mario,
non avrai risposto al 100% ma mi hai messo la classica pulce nel classico organo... :-)
Dunque, riassumo la spiegazione/soluzione del problema per chi eventualmente si troverà in analoghe circostanze.
Punto 1 - Il mio DB è in Firebird, charset ISO8859_1
Punto 2 - Lazarus "lavora" con UTF8 [Grazie Mario!]
Punto 3 - Ponendo a UTF8 la proprietà Charset di IBConnection permettiamo in effetti la giusta interfaccia tra Firebird e programma Lazarus: Firebird registra i suoi dati in ISO8859, Lazarus li vede e tratta come UTF8.
Punto 4 - FONDAMENTALE - Molti dati li acquisivo direttamente dal Web tramite componente IXMLHttpRequest; questi dati venivano passati direttamente a Firebird, quindi non venivano interfacciati ed eventualmente tradotti da Lazarus.
Punto 5 - I dati forniti da IXMLHttpRequest erano in UTF7 (credo, ??). Dico questo perche' un'accentata come "á" veniva fornita come #225 e qui Firebird si "incavolava" perchè la voleva con un codice a due byte (non ricordo bene quali, tipo #xxx#xxx).
Finale - Ho risolto il tutto con un semplice UTF8Encode(req.responseText)!!  8)

Vi saluto
Mimmo
Titolo: Re:[RISOLTO + ADDENDUM] Charset e Firebird
Inserito da: mimmolazzaro - Aprile 23, 2013, 10:27:51 am
Il problema si è ripresentato, questa volta con dati provenienti da un copia-incolla dal web...
[ Per inciso - Lo sapevate che esistono due tipi di apostrofo? Quello "normale", " ' ", esadecimale 27, e una schifezza codificata E2 80 99. Qui firebird andava in fibrillazione]

Soluzione definitiva (incrociando le dita), quando si interfaccia lazarus con firebird: scegliere charset NONE sul lato Firebird, e UTF8 su IBConnection.

Spero possa essere utile a qualcuno.

Ciao
Mimmo