Исправления в Firebird 2.5, касающиеся кодировки строки подключения
Autor: Adriano dos Santos Fernandes [email protected]
Datum: 2008-12-15
Pre FB 2.5, imena datoteka koja se koriste u connection string-u se uvek prosleđuju od klijenta do
servera bez ikakve konverzije. Na serveru se ta imena datoteka koriste sa OS API funkcijama bez
ikakve konverzije, takođe. Ovo stvara situaciju gde imena datoteka koja koriste ne-ASCII karaktere ne
funkcionišu dobro kada su klijent i server različiti OS ili čak isti OS koji koristi različite
kodne stranice.
Problem je rešen u FB 2.5 na sledeći način:
Ime datoteke se, po podrazumevanoj vrednosti, smatra da je na kodnoj stranici OS-a.
Uvodi se novi DPB, nazvan isc_dpb_utf8.filename. Njegovo značenje je da promeni gornje pravilo, tako da FB
treba da smatra prosleđeno ime datoteke kao da je u UTF-8.
Ako klijent verzije 2.5 (ili noviji) komunicira sa udaljenim serverom starijim od verzije 2.5, i
isc_dpb_utf8.filename je korišćen, klijent konvertuje ime datoteke iz UTF-8 u klijentsku
kodnu stranicu i prosleđuje to ime datoteke serveru. Klijent uklanja isc_dpb_utf8.filename DPB.
Ovo garantuje unazadnu kompatibilnost kada ljudi koriste istu kodnu stranicu na klijentu i
serveru OS.
Ako klijent verzije 2.5 (ili noviji) komunicira sa serverom verzije 2.5 (ili novijim), i
isc_dpb_utf8.filename nije korišćen, klijent konvertuje ime datoteke sa kodne stranice OS-a u
UTF-8 i ubacuje isc_dpb_utf8.filename DPB. Ako je isc_dpb_utf8.filename korišćen, klijent samo
prosleđuje originalno ime datoteke unutar DPB-a serveru. Dakle, klijent uvek prosleđuje serveru
UTF-8 ime datoteke i isc_dpb_utf8.filename DPB.
Ime datoteke primljeno na serveru je podložno istim gornjim pravilima. Ali imajte na umu da klijent verzije 2.5
može automatski konvertovati ime datoteke i ubaciti DPB. Klijenti stariji od verzije 2.5 to ne rade,
tako da će se primljena imena datoteka smatrati kao da su na kodnoj stranici servera. Ponovo garantujemo
unazadnu kompatibilnost kada su kodne stranice klijenta i servera iste.
Kodna stranica OS-a i UTF-8 možda nisu najbolji izbor za imena datoteka. Na primer, ako imate
ISQL (ili neki drugi alat) skriptu i ta skripta koristi drugi connection charset. Ne biste mogli
ispravno urediti skriptu (ili bilo koju datoteku) koristeći više karakter setova (kodnih stranica). Zato sada možete
kodirati bilo koji Unicode karakter kao ASCII karaktere u imenu datoteke u connection string-u. To se
postiže korišćenjem simbola #. To je prefiks za broj Unicode kodne tačke (u heksadecimalnom
formatu, kao U+XXXX notacija). Trebalo bi da to napišete na ovaj način: #XXXX sa X kao 0-9, a-f, A-F.
Ako želite da koristite doslovni #, možete koristiti ## ili #0023 (broj kodne tačke za njega).
Taj karakter se tumači sa ovom novom semantikom na serveru čak i ako je klijent stariji
od verzije 2.5.
Kodna stranica OS-a koja se koristi za konverzije je:
- Windows: Windows ANSI kodna stranica
- Ostali: UTF-8
Ažurirano za 2.5 Beta 2: 2008-07-11
Ova pravila su sada važeća i za string DPB stavke.