Korrekturen in Firebird 2.5 bezüglich des Zeichensatzes der Verbindungszeichenfolge
Autor: Adriano dos Santos Fernandes [email protected]
Datum: 2008-12-15
Vor FB 2.5 werden Dateinamen, die in der Verbindungszeichenfolge verwendet werden, immer ohne Konvertierung vom Client an den
Server übergeben. Auf dem Server werden diese Dateinamen ebenfalls ohne Konvertierung mit OS-API-Funktionen verwendet. Dies führt zu der Situation, dass Dateinamen mit Nicht-ASCII-Zeichen nicht
gut interoperabel sind, wenn Client und Server unterschiedliche Betriebssysteme oder sogar dasselbe Betriebssystem mit unterschiedlichen
Codepages verwenden.
Das Problem wird in FB 2.5 auf folgende Weise behoben:
Der Dateiname wird standardmäßig als in der OS-Codepage betrachtet.
Ein neues DPB wird eingeführt, namens isc_dpb_utf8.filename. Seine Bedeutung besteht darin, die obige Regel zu ändern, sodass FB
den übergebenen Dateinamen als in UTF-8 betrachten soll.
Wenn ein v2.5- (oder neuerer) Client mit einem Remote-Server kommuniziert, der älter als v2.5 ist, und
isc_dpb_utf8.filename verwendet wurde, konvertiert der Client den Dateinamen von UTF-8 in die Client-
Codepage und übergibt diesen Dateinamen an den Server. Der Client entfernt das isc_dpb_utf8.filename-DPB.
Dies gewährleistet Abwärtskompatibilität, wenn Personen auf Client- und
Server-Betriebssystem dieselbe Codepage verwenden.
Wenn ein v2.5- (oder neuerer) Client mit einem v2.5- (oder neueren) Server kommuniziert und
isc_dpb_utf8.filename nicht verwendet wurde, konvertiert der Client den Dateinamen von der OS-Codepage in
UTF-8 und fügt das isc_dpb_utf8.filename-DPB ein. Wenn isc_dpb_utf8.filename verwendet wurde, übergibt der Client einfach
den ursprünglichen Dateinamen innerhalb des DPB an den Server. Der Client übergibt also immer einen
UTF-8-Dateinamen und das isc_dpb_utf8.filename-DPB an den Server.
Der auf dem Server empfangene Dateiname unterliegt denselben obigen Regeln. Beachten Sie jedoch, dass der v2.5-Client
den Dateinamen möglicherweise automatisch konvertiert und das DPB einfügt. Clients älter als v2.5 tun dies nicht,
daher werden die empfangenen Dateinamen als in der Server-Codepage betrachtet. Wir gewährleisten erneut
Abwärtskompatibilität, wenn Client- und Server-Codepage identisch sind.
Die OS-Codepage und UTF-8 sind möglicherweise nicht die beste Wahl für Dateinamen. Wenn Sie beispielsweise ein
ISQL- (oder ein anderes Tool-) Skript hatten und dieses Skript einen anderen Verbindungszeichensatz verwendet. Sie konnten
ein Skript (oder eine beliebige Datei) nicht korrekt bearbeiten, das mehrere Zeichensätze (Codepages) verwendet. Sie können nun
jedes Unicode-Zeichen als ASCII-Zeichen in der Dateinamen-Verbindungszeichenfolge kodieren. Dies wird
mithilfe des Symbols # erreicht. Es ist ein Präfix für eine Unicode-Codepunktnummer (im hexadezimalen
Format, wie die U+XXXX-Notation). Sie sollten es folgendermaßen schreiben: #XXXX mit X als 0-9, a-f, A-F.
Wenn Sie das Literal # verwenden möchten, können Sie ## oder #0023 (die Codepunktnummer dafür) verwenden.
Dieses Zeichen wird mit dieser neuen Semantik auf dem Server interpretiert, selbst wenn der Client älter
als v2.5 ist.
Die für Konvertierungen verwendete OS-Codepage ist:
- Windows: Die Windows-ANSI-Codepage
- Andere: UTF-8
Aktualisiert für 2.5 Beta 2: 2008-07-11
Diese Regeln gelten nun auch für String-DPB-Elemente.