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:
ejemplos
- 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:
El resultado de esta consulta se visualiza como sigue en un emulador de terminal 3270 con el CCSID definido en 37:SELECT C1 FROM T1;
Debido a que los caracteres en А н д р е й no existen en CCSID 37, este nombre se muestra como‘Hi, my name is ......'....... Para resolver este problema, puede añadir la función EBCDIC_STR, como se muestra en el ejemplo siguiente:
Db2 devuelve la siguiente salida con datos con escape:SELECT EBCDIC_STR(C1)FROM T1;
Observe que 0410 es el valor e UTF-16 a para А, que 043D es el valor e UTF-16 a para н y así sucesivamente.‘Hi, my name is \0410\043D\0434\0440\0435\0439' - Ejemplo: anulación del escape de datos
- Supongamos que T1.C1 contiene ' А н д р е й '. Supongamos que emite la consulta siguiente:
Db2 interpreta esta consulta como se indica a continuación:SELECT HEX(UNISTR(ASCII_STR(C1))) FROM T1;De este modo, el resultado final de esta consulta es: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\0439Db2 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)))D090D0BDD0B4D180D0B5D0B9A continuación, Db2 devuelve el valor hexadecimal de la serie UTF-8.
Supongamos que emite la siguiente consulta similar:D090D0BDD0B4D180D0B5D0B9
Db2 interpreta esta consulta como se indica a continuación:SELECT HEX(UNISTR(ASCII_STR(C1),UTF16)) FROM T1;De este modo, el resultado final de esta consulta es: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\0439Db2 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)))D090D0BDD0B4D180D0B5D0B9A continuación, Db2 devuelve el valor hexadecimal de la serie UTF-16. 0410043D0434044004350439