LOCALE ISO-8859-15 para símbolo de euro (€) en BD

Java Code1

LOCALE ISO-8859-15 para símbolo de euro (€) en BD

El símbolo del Euro. Conveniencia de conversión de una base de datos 8859-1 a 8859-15

El conjunto de caracteres ISO-8859-1 está completo, cada punto de código se asigna a un carácter. En 1999, se hace necesario disponer del símbolo del euro conjuntamente con otros caracteres. Como consecuencia ISO creó la norma ISO-8859-15, que es idéntica a la norma ISO-8859-1 a excepción de 8 caracteres.

Para poder representar el símbolo del euro (€) es necesario que la BD esté codificada en locale ISO-8859-15

Para una correcta identificación y conversion a la norma ISO-8859-15 a partir de la norma ISO-8859-1 se muestran las equivalencia de caracteres distintos en la siguiente tabla.

Los caracteres eliminados de la norma ISO 8859-1 para dejar sitio a los añadidos en la norma ISO 8859-15

Hex code ISO-8859-1 Removed ISO-8859-15 Added
Character Character Name Character Character Name Unicode
Code Point
A4 ¤ Currency Sign Euro Sign U+20AC
A6 ¦ Broken Bar Š Latin Capital Letter S With Caron U+0160
A8 ¨ Diaeresis š Latin Small Letter S With Caron U+0161
B4 ´ Acute Accent Ž Latin Capital Letter Z With Caron U+017D
B8 ¸ Cedilla ž Latin Small Letter Z With Caron U+017E
BC ¼ Vulgar Fraction One Quarter Œ Latin Capital Ligature OE U+0152
BD ½ Vulgar Fraction One Half œ Latin Small Ligature OE U+0153
BE ¾ Vulgar Fraction Three Quarters Ÿ Latin Capital Letter Y With Diaeresis U+0178

ISO/IEC 8859-15 – From Wikipedia →

    Cambios de la tabla ISO-8859-1 y equivalencias de posición en decimal, 
    octal y hexadecimal.

    Decimal     164     166     168     180     184     188     189     190
    Octal       \244    \246    \250    \264    \270    \274    \275    \276
    Hex         0xA4    0xA6    0xA8    0xB4    0xB8    0xBC    0xBD    0xBE
    8859-1      ¤       ¦       ¨       ´       ¸       ¼       ½       ¾
    8859-15     €       Š       š       Ž       ž       Œ       œ       Ÿ

Los caracteres Š, š, Ž, y ž se utilizan en la transliteración de algunos nombres rusos en tipografía de los idiomas finés y estonio.
Los caracteres Œ, œ y Ÿ son símbolos requeridos para el idioma francés.

Equivalencias códigos ISO/IEC y notación interna informix

Equivalencias codificación
ISO/IEC Internal Infomix
es_es.8859-1 es_ES.819
es_es.8859-15 es_ES.57391
Procedimiento para realizar la conversión del juego de caracteres

El procedimiento para la conversión de una base de datos informix consiste simplemente en exportar e importar la base de datos alterando las variables de entorno, según describiremos más adelante. Antes, no obstante, debe saber que informix en el proceso de conversión transformará cualquiera de los ocho caracteres ASCII originales de la tabla 8859-1 en el caracter ASCII Decimal 026 que se corresponde con el caracter Control-Z , siendo un caracter de uso especial y además no visible.

El caracter ASCII 026 puede generar errores durante su representación en algunos programas, por ello aconsejamos su depuración sustituyéndolo por cualquier caracter visible que represente en la medida de lo posible a su valor original.

La conversión de caracteres no afecta a las columnas de tipo CLOB ni BLOB, es por ello que solo aplicaremos la sustitución a los contenidos de las tablas volcadas en sus respectivos ficheros con la extensión unl (unload).

  1. Exportar para obtener la transformación de los datos a es_es.8859-15

    Ejecutaremos el dbexport con las variables de entorno fijadas con los valores siguientes :

        DB_LOCALE=es_es.8859-1
        CLIENT_LOCALE=es_es.8859-15
        dbexport ( Modalidad de exportación a ficheros unl )
    
  2. Sustituir caracter ASCII Decimal 026 por comilla simple.

    Ahora ya tenemos los ficheros unl codificados según la tabla es_es.8859-15 , el siguiente paso
    consistirá en sustituir el caracter ASCII Decimal 026 (Hex=1A ; Octal=\032 ; Char name=SUB ; Control-Z)
    por el caracter comilla simple.

    Ejecutar la shell change_ascii_026.sh Antes de proceder a la sustitución quizás le interese
    conocer los ficheros que incluyen el caracter ASCII 026, para ello puede ejecutar la shell ver_ascii_026.sh

  3. Importar la base de datos es_es.8859-15
        DB_LOCALE=es_es.8859-15
        CLIENT_LOCALE=es_es.8859-15
        dbimport
    
Linux/Unix shell script: ver_ascii_026.sh
#!/bin/sh
# ----------------------------------------------------------------------------------
# ver_ascii_026.sh
# Realiza la búsqueda del caracter ASCII Decimal 026 (Hex=1A ; Octal=\032 ; Char name=SUB ; Control-Z)
# ATENCION: Con el programa vi , para introducir el caracter Control-Z, deberá usar las
# combinaciones Control-V  y  Control-Z
# ----------------------------------------------------------------------------------
for FILE in `ls -l *.unl | awk '{ print $9 }'`; do
    echo $FILE
    if [ ! -e $FILE ] ; then
       echo "Error fichero $FILE no encontrado !"
       exit
    fi
    # grep $'\x1a' # e.g. equivalent to grep "^Z"
    cat $FILE | grep $'\x1a'
done
Linux/Unix shell script: change_ascii_026.sh
#!/bin/sh
# ----------------------------------------------------------------------------------
# change_ascii_026.sh
# Sustituye el caracter ASCII Decimal 026 (Hex=1A ; Octal=\032 ;  
# Char name=SUB ; Control-Z) por el caracter comilla simple
# ----------------------------------------------------------------------------------
for FILE in `ls -l *.unl | awk '{ print $9 }'`; do
    echo $FILE
    if [ ! -e $FILE ] ; then
       echo "Error fichero $FILE no encontrado !"
       exit
    fi
    FILEBASE=`basename $FILE .unl`
    FILEOLD=${FILEBASE}.old
    FILENEW=${FILEBASE}.unl
    mv   $FILE  $FILEOLD
    # ASCII 026 = Octal 032 = Hex 1A
    cat $FILEOLD | tr "\032" "'" > $FILENEW
done