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.