Ta strona została przetłumaczona maszynowo. Przeczytaj oryginał angielski. English

Biblioteka IBSurgeon

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.