Correzioni in Firebird 2.5 riguardanti il charset della stringa di connessione
Autore: Adriano dos Santos Fernandes [email protected]
Data: 2008-12-15
Prima di FB 2.5, i nomi dei file utilizzati nella stringa di connessione vengono sempre passati dal client al
server senza alcuna conversione. Sul server, quei nomi di file vengono utilizzati con le funzioni API del sistema operativo senza
alcuna conversione, anch’essi. Questo crea la situazione in cui i nomi di file che utilizzano caratteri non ASCII non
interoperano bene quando il client e il server sono sistemi operativi diversi o anche lo stesso sistema operativo che utilizza
codepage differenti.
Il problema viene affrontato in FB 2.5 nel seguente modo:
Il nome del file è considerato, per impostazione predefinita, nella codepage del sistema operativo.
Viene introdotto un nuovo DPB, denominato isc_dpb_utf8.filename. Il suo significato è quello di modificare la regola di cui sopra, così FB
dovrebbe considerare il nome del file passato come in UTF-8.
Se un client v2.5 (o successivo) sta comunicando con un server remoto precedente alla v2.5, e isc_dpb_utf8.filename è stato utilizzato, il client converte il nome del file da UTF-8 alla codepage del
client e passa quel nome di file al server. Il client rimuove il DPB isc_dpb_utf8.filename.
Questo garantisce la compatibilità con le versioni precedenti quando le persone utilizzano la stessa codepage sul client e sul
sistema operativo del server.
Se un client v2.5 (o successivo) sta comunicando con un server v2.5 (o successivo), e isc_dpb_utf8.filename non è stato utilizzato, il client converte il nome del file dalla codepage del sistema operativo in
UTF-8 e inserisce il DPB isc_dpb_utf8.filename. Se isc_dpb_utf8.filename è stato utilizzato, il client si limita a
passare il nome del file originale all’interno del DPB al server. Quindi il client passa sempre al server
un nome di file in UTF-8 e il DPB isc_dpb_utf8.filename.
Il nome del file ricevuto sul server è soggetto alle stesse regole di cui sopra. Ma si noti che il client v2.5
può convertire automaticamente il nome del file e inserire il DPB. I client precedenti alla v2.5 non lo fanno,
quindi i nomi di file ricevuti verranno considerati come nella codepage del server. Garantiamo nuovamente la
compatibilità con le versioni precedenti quando la codepage del client e del server sono le stesse.
La codepage del sistema operativo e UTF-8 potrebbero non essere la scelta migliore per i nomi di file. Ad esempio, se si dispone di uno
script ISQL (o di un altro strumento) e quel script utilizza un’altra codepage di connessione. Non si potrebbe
modificare correttamente uno script (o qualsiasi file) utilizzando più set di caratteri (codepage). Quindi ora è possibile
codificare qualsiasi carattere Unicode come caratteri ASCII nella stringa di connessione del nome del file. Questo
viene realizzato utilizzando il simbolo #. È un prefisso per un numero di punto di codice Unicode (in formato
esadecimale, come la notazione U+XXXX). Si dovrebbe scriverlo in questo modo: #XXXX con X che è 0-9, a-f, A-F.
Se si desidera utilizzare il carattere # letterale, si può usare ## o #0023 (il numero del punto di codice per esso).
Questo carattere viene interpretato con questa nuova semantica sul server anche se il client è precedente
alla v2.5.
La codepage del sistema operativo utilizzata per le conversioni è:
- Windows: La pagina di codice ANSI di Windows
- Altri: UTF-8
Aggiornato per 2.5 Beta 2: 2008-07-11
Queste regole sono ora valide anche per gli elementi DPB di tipo stringa.