Esta página fue traducida automáticamente. Lee el original en inglés. English

Biblioteca de IBSurgeon

Correcciones en Firebird 2.5 respecto al charset de la cadena de conexión

Autor: Adriano dos Santos Fernandes [email protected]

Fecha: 2008-12-15

Antes de FB 2.5, los nombres de archivo utilizados en la cadena de conexión siempre se pasan del cliente al

servidor sin ninguna conversión. En el servidor, esos nombres de archivo se utilizan con funciones de API del SO sin

ninguna conversión, tampoco. Esto crea la situación en la que los nombres de archivo que utilizan caracteres no ASCII no

interoperan bien cuando el cliente y el servidor son SO diferentes o incluso el mismo SO usando diferentes

páginas de códigos.

El problema se aborda en FB 2.5 de la siguiente manera:

El nombre de archivo se considera, por defecto, que está en la página de códigos del SO.

Se introduce un nuevo DPB, llamado isc_dpb_utf8.filename. Su significado es cambiar la regla anterior, para que FB

considere el nombre de archivo pasado como si estuviera en UTF-8.

Si un cliente v2.5 (o más reciente) está comunicándose con un servidor remoto anterior a v2.5, y

se utilizó isc_dpb_utf8.filename, el cliente convierte el nombre de archivo de UTF-8 a la página de códigos del

cliente y pasa ese nombre de archivo al servidor. El cliente elimina el DPB isc_dpb_utf8.filename.

Esto garantiza compatibilidad hacia atrás cuando las personas usan la misma página de códigos en el cliente y el

SO del servidor.

Si un cliente v2.5 (o más reciente) está comunicándose con un servidor v2.5 (o más reciente), y

no se utilizó isc_dpb_utf8.filename, el cliente convierte el nombre de archivo de la página de códigos del SO a

UTF-8 e inserta el DPB isc_dpb_utf8.filename. Si se utilizó isc_dpb_utf8.filename, el cliente simplemente

pasa el nombre de archivo original dentro del DPB al servidor. Así que el cliente siempre pasa al servidor

un nombre de archivo en UTF-8 y el DPB isc_dpb_utf8.filename.

El nombre de archivo recibido en el servidor está sujeto a las mismas reglas anteriores. Pero tenga en cuenta que el cliente v2.5

puede convertir automáticamente el nombre de archivo e insertar el DPB. Los clientes anteriores a v2.5 no lo hacen,

por lo que los nombres de archivo recibidos se considerarán como si estuvieran en la página de códigos del servidor. Nuevamente garantizamos

compatibilidad hacia atrás cuando la página de códigos del cliente y del servidor son la misma.

La página de códigos del SO y UTF-8 pueden no ser la mejor opción para nombres de archivo. Por ejemplo, si tuviera un

script de ISQL (o alguna otra herramienta) y ese script utiliza otro juego de caracteres de conexión. No podría

editar correctamente un script (o cualquier archivo) usando múltiples juegos de caracteres (páginas de códigos). Así que ahora puede

codificar cualquier carácter Unicode como caracteres ASCII en el nombre de archivo de la cadena de conexión. Eso se

logra usando el símbolo #. Es un prefijo para un número de punto de código Unicode (en formato

hexadecimal, como la notación U+XXXX). Debe escribirlo de esta manera: #XXXX con X siendo 0-9, a-f, A-F.

Si desea usar el # literal, puede usar ## o #0023 (el número de punto de código para él).

Ese carácter se interpreta con esta nueva semántica en el servidor incluso si el cliente es anterior

a v2.5.

La página de códigos del SO utilizada para conversiones es:

- Windows: La página de códigos ANSI de Windows

- Otros: UTF-8

Actualizado para 2.5 Beta 2: 2008-07-11

Estas reglas ahora también son válidas para elementos DPB de cadena.