Opravy v Firebird 2.5 týkající se znakové sady připojovacího řetězce
Autor: Adriano dos Santos Fernandes [email protected]
Datum: 2008-12-15
Před FB 2.5 jsou názvy souborů použité v připojovacím řetězci vždy předávány z klienta na
server bez jakékoli konverze. Na serveru jsou tyto názvy souborů použity s API funkcemi OS bez
jakékoli konverze, také. To vytváří situaci, kdy názvy souborů používající ne-ASCII znaky
nefungují dobře, když jsou klient a server na různých OS nebo dokonce na stejném OS s různými
kódovými stránkami.
Tento problém je řešen ve FB 2.5 následujícím způsobem:
Název souboru je ve výchozím nastavení považován za kódovou stránku OS.
Je zaveden nový DPB s názvem isc_dpb_utf8.filename. Jeho význam je změnit výše uvedené pravidlo, takže FB
by měl považovat předaný název souboru za UTF-8.
Pokud klient verze 2.5 (nebo novější) komunikuje se vzdáleným serverem starším než 2.5 a
isc_dpb_utf8.filename byl použit, klient převede název souboru z UTF-8 na kódovou stránku klienta
a předá tento název souboru serveru. Klient odstraní DPB isc_dpb_utf8.filename.
To zaručuje zpětnou kompatibilitu, když lidé používají stejnou kódovou stránku na klientovi a
serverovém OS.
Pokud klient verze 2.5 (nebo novější) komunikuje se serverem verze 2.5 (nebo novější) a
isc_dpb_utf8.filename nebyl použit, klient převede název souboru z kódové stránky OS na
UTF-8 a vloží DPB isc_dpb_utf8.filename. Pokud byl isc_dpb_utf8.filename použit, klient jen
předá původní název souboru v rámci DPB serveru. Takže klient vždy předává serveru
název souboru v UTF-8 a DPB isc_dpb_utf8.filename.
Název souboru přijatý na serveru podléhá stejným výše uvedeným pravidlům. Ale poznamenejte, že klient verze 2.5
může automaticky převést název souboru a vložit DPB. Klienti starší než 2.5 to nedělají,
takže přijaté názvy souborů budou považovány za kódovou stránku serveru. Opět zaručujeme
zpětnou kompatibilitu, když jsou kódové stránky klienta a serveru stejné.
Kódová stránka OS a UTF-8 nemusí být nejlepší volbou pro názvy souborů. Například, pokud máte
ISQL (nebo jiný nástroj) skript a tento skript používá jinou znakovou sadu připojení. Nemohli byste
správně upravit skript (nebo jakýkoli soubor) pomocí více znakových sad (kódových stránek). Takže nyní můžete
zakódovat jakýkoli znak Unicode jako ASCII znaky v názvu souboru v připojovacím řetězci. To je
dosaženo pomocí symbolu #. Je to předpona pro číslo kódového bodu Unicode (v hexadecimálním
formátu, jako zápis U+XXXX). Měli byste to napsat tímto způsobem: #XXXX s X jako 0-9, a-f, A-F.
Pokud chcete použít doslovný znak #, můžete použít ## nebo #0023 (číslo kódového bodu pro něj).
Tento znak je interpretován s touto novou sémantikou na serveru, i když je klient starší
než 2.5.
Kódová stránka OS použitá pro konverze je:
- Windows: Kódová stránka Windows ANSI
- Ostatní: UTF-8
Aktualizováno pro 2.5 Beta 2: 2008-07-11
Tato pravidla jsou nyní platná také pro položky DPB typu string.