Generación de datos Unicode con escape

Si proporciona caracteres Unicode a una aplicación u objeto que no tiene previsto manejar datos Unicode, pueden perderse datos a menos que se escapen determinados caracteres. Por ejemplo, es posible que deba proporcionar datos Unicode mediante una aplicación que tenga variables host EBCDIC. O bien es posible que desee almacenar datos Unicode en una tabla que no sea Unicode.

Acerca de esta tarea

También es posible que desee seleccionar caracteres Unicode de una aplicación que se ejecute en un emulador de terminal 3270, como SPUFI. Si el valor de CCSID del emulador no incluye esos caracteres Unicode, dichos caracteres no se visualizarán correctamente en la salida.

En estos casos, los caracteres Unicode que no pueden representarse en el esquema de codificación de la aplicación o el objeto se perderán a menos que los escape. Los datos con escape son uno o varios caracteres que no pueden representarse en un CCSID de destino y que, en su lugar, se representan mediante el valor de codificación. Esta representación conserva los datos. Por ejemplo, la versión escapada del carácter Unicode д es \0434. Por lo tanto, la siguiente cadena ASCII contiene el carácter escapado д: 'The escaped character is \0434'

Si inserta datos con escape en una tabla Unicode, Db2 no interpreta los datos y los modifica para que sean sin escape. Los datos con escape se almacenan tal cual en una tabla Db2, independientemente de si la tabla es ASCII, EBCDIC o Unicode.

Procedimiento

Para generar datos Unicode con escape:

  1. Utilice la función ASCII_STR o la función EBCDIC_STR.

    Estas funciones convierten una serie Unicode en una serie ASCII o EBCDIC. Los caracteres que no existan en ASCII o EBCDIC se convierten al formato \xxxx, siendo xxxx una unidad de código UTF-16.

    Para obtener más información sobre cómo convertir caracteres al formato Unicode ( UTF-16 ), consulte el paso 2 de las instrucciones para la instrucción INSERT en Insertar datos en una tabla Unicode.

  2. Si posteriormente debe volver a convertir en Unicode la serie EBCDIC o ASCII con datos con escape, utilice la funciónUNICODE_STR.

    La forma abreviada del nombre de la función es UNISTR. Esta función interpreta los datos con escape de la serie de origen. Los valores precedidos de una barra inclinada invertida ('\') se tratan como caracteres Unicode UTF-16. Por ejemplo, '\0041' es la representación en Unicode UTF-16 de la 'A'.

ejemplos

Iniciar información de la interfaz de programación de uso general.
Ejemplo: escape de datos
Supongamos que T1.C1 contiene 'Hola, mi nombre es А н д р е й '. Tenga en cuenta que los caracteres en А н д р е й son todos caracteres cirílicos, aunque algunos de ellos se parecen a caracteres latinos. Supongamos que emite la siguiente consulta en SPUFI:
SELECT C1 FROM T1;
El resultado de esta consulta se visualiza como sigue en un emulador de terminal 3270 con el CCSID definido en 37:
‘Hi, my name is ......'
Debido a que los caracteres en А н д р е й no existen en CCSID 37, este nombre se muestra como ....... Para resolver este problema, puede añadir la función EBCDIC_STR, como se muestra en el ejemplo siguiente:
SELECT EBCDIC_STR(C1)FROM T1;
Db2 devuelve la siguiente salida con datos con escape:
‘Hi, my name is \0410\043D\0434\0440\0435\0439'
Observe que 0410 es el valor e UTF-16 a para А, que 043D es el valor e UTF-16 a para н y así sucesivamente.
Ejemplo: anulación del escape de datos
Supongamos que T1.C1 contiene ' А н д р е й '. Supongamos que emite la consulta siguiente:
SELECT HEX(UNISTR(ASCII_STR(C1))) FROM T1;
Db2 interpreta esta consulta como se indica a continuación:
Tabla 1. Cómo interpreta Db2 las consultas con UNISTR
Parte de sentencias SELECT Resultado Explicación
ASCII_STR(C1) \0410\043D\0434\0440\0435\0439 Db2 devuelve el valor en C1 ( А н д р е й ) como una cadena ASCII. Puesto que estos caracteres no pueden representarse en ASCII, se escapan.
UNISTR(ASCII_STR(C1)) A n de r é é A continuación, Db2 convierte la serie ASCII con escape en una serie Unicode UTF-8. UTF-8 incluye todos los caracteres, de modo que ya no requieren escape.
HEX(UNISTR(ASCII_STR(C1))) D090D0BDD0B4D180D0B5D0B9 A continuación, Db2 devuelve el valor hexadecimal de la serie UTF-8.
De este modo, el resultado final de esta consulta es:
D090D0BDD0B4D180D0B5D0B9
Supongamos que emite la siguiente consulta similar:
SELECT HEX(UNISTR(ASCII_STR(C1),UTF16)) FROM T1;
Db2 interpreta esta consulta como se indica a continuación:
Tabla 2. Cómo interpreta Db2 la consulta con los parámetros UNISTR y UTF16
Parte de sentencias SELECT Resultado Explicación
ASCII_STR(C1) \0410\043D\0434\0440\0435\0439 Db2 devuelve el valor en C1 ( А н д р е й ) como una cadena ASCII. Puesto que estos caracteres no pueden representarse en ASCII, se escapan.
UNISTR(ASCII_STR(C1),UTF16) A n de r é é A continuación, Db2 convierte la serie ASCII con escape en una serie Unicode UTF-16. UTF-16 incluye todos los caracteres, de modo que ya no requieren escape.
HEX(UNISTR(ASCII_STR(C1))) D090D0BDD0B4D180D0B5D0B9 A continuación, Db2 devuelve el valor hexadecimal de la serie UTF-16.
De este modo, el resultado final de esta consulta es:
0410043D0434044004350439
Finalizar la información de la interfaz de programación de uso general.