Poprawki w Firebird 2.5 dotyczące zestawu znaków w ciągu połączenia
Autor: Adriano dos Santos Fernandes [email protected]
Data: 2008-12-15
Przed FB 2.5, nazwy plików używane w ciągu połączenia są zawsze przekazywane z klienta do
serwera bez żadnej konwersji. Na serwerze te nazwy plików są używane z funkcjami API systemu operacyjnego bez
żadnej konwersji również. Stwarza to sytuację, w której nazwy plików zawierające znaki spoza ASCII nie
współpracują dobrze, gdy klient i serwer działają na różnych systemach operacyjnych, a nawet na tym samym systemie operacyjnym przy użyciu różnych
stron kodowych.
Problem został rozwiązany w FB 2.5 w następujący sposób:
Nazwa pliku jest domyślnie uważana za będącą w stronie kodowej systemu operacyjnego.
Wprowadzono nowy DPB o nazwie isc_dpb_utf8.filename. Jego znaczenie polega na zmianie powyższej reguły, tak aby FB
traktował przekazaną nazwę pliku jako będącą w UTF-8.
Jeśli klient w wersji 2.5 (lub nowszej) komunikuje się ze zdalnym serwerem starszym niż 2.5, a
isc_dpb_utf8.filename został użyty, klient konwertuje nazwę pliku z UTF-8 na stronę kodową
klienta i przekazuje tę nazwę pliku do serwera. Klient usuwa DPB isc_dpb_utf8.filename.
Gwarantuje to wsteczną kompatybilność, gdy ludzie używają tej samej strony kodowej na kliencie i
serwerze.
Jeśli klient w wersji 2.5 (lub nowszej) komunikuje się z serwerem w wersji 2.5 (lub nowszej), a
isc_dpb_utf8.filename nie został użyty, klient konwertuje nazwę pliku ze strony kodowej systemu operacyjnego na
UTF-8 i wstawia DPB isc_dpb_utf8.filename. Jeśli isc_dpb_utf8.filename został użyty, klient po prostu
przekazuje oryginalną nazwę pliku wewnątrz DPB do serwera. Tak więc klient zawsze przekazuje do serwera
nazwę pliku w UTF-8 oraz DPB isc_dpb_utf8.filename.
Nazwa pliku otrzymana na serwerze podlega tym samym regułom co powyżej. Należy jednak zauważyć, że klient w wersji 2.5
może automatycznie konwertować nazwę pliku i wstawiać DPB. Klienci starsi niż 2.5 tego nie robią,
więc otrzymane nazwy plików będą traktowane jako będące w stronie kodowej serwera. Ponownie gwarantujemy
wsteczną kompatybilność, gdy strona kodowa klienta i serwera jest taka sama.
Strona kodowa systemu operacyjnego i UTF-8 mogą nie być najlepszym wyborem dla nazw plików. Na przykład, jeśli miałeś
skrypt ISQL (lub innego narzędzia) i ten skrypt używa innego zestawu znaków połączenia. Nie mogłeś
poprawnie edytować skryptu (lub dowolnego pliku) używając wielu zestawów znaków (stron kodowych). Możesz teraz
zakodować dowolny znak Unicode jako znaki ASCII w nazwie pliku w ciągu połączenia. To jest
osiągane za pomocą symbolu #. Jest to prefiks dla numeru punktu kodowego Unicode (w formacie
szesnastkowym, jak notacja U+XXXX). Należy zapisać to w ten sposób: #XXXX, gdzie X to 0-9, a-f, A-F.
Jeśli chcesz użyć dosłownego znaku #, możesz użyć ## lub #0023 (numer punktu kodowego dla niego).
Ten znak jest interpretowany z tą nową semantyką na serwerze, nawet jeśli klient jest starszy
niż 2.5.
Strona kodowa systemu operacyjnego używana do konwersji to:
- Windows: Strona kodowa ANSI systemu Windows
- Inne: UTF-8
Zaktualizowano dla 2.5 Beta 2: 2008-07-11
Te reguły są teraz ważne również dla elementów DPB typu string.