Etiqueta

6 de marzo de 2014

De No-Unicode a Unicode (Parte 5 de 10)

Conversión de datos Unicode

La función uniconv() permite convertir caracteres Unicode de un tipo a otro.

Su sintaxis es: uniconv(srctype,src,dsttype,dst,bom,errtext)

Convierte src y guarda el resultado en dst. Devolverá cero o un valor distinto de cero junto con el texto de error en errtext. src y dst pueden ser variables de tipo binario o carácter, en función de los valores usados en srctype y dsttype.

bom es un valor booleano: si es cierto, dst será “Unicode Byte Order Marker” (BOM).

srctype y dsttype podrán ser cualquiera de las siguientes constates kUniType...

kUniTypeAuto

La codificación de origen es detectada automáticamente y sólo puede ser usado en alusión al origen de datos.

kUniTypeUTF8

Los datos son guardados en una variable binaria y codificados en UTF-8.

kUniTypeUTF16BE

Los datos son guardados en una variable binaria y codificados en UTF-16BE.

kUniTypeUTF16LE

Los datos son guardados en una variable binaria y codificados en UTF-16LE.

kUniTypeUTF16

Los datos son guardados en una variable binaria y codificados en UTF-16LE si la plataforma es “little-endian” o en UTF-16BE si la plataforma en uso es “big-endian”. Esto asegura estar usando la codificación apropiada según el sistema operativo en uso.

kUniTypeUTF32BE

Los datos son guardados en una variable binaria y codificados en UTF-32BE.

kUniTypeUTF32LE

Los datos son guardados en una variable binaria y codificados en UTF-32LE.

kUniTypeUTF32

Los datos son guardados en una variable binaria y codificados en UTF-32LE si la plataforma es “little-endian” o en UTF-32BE si la plataforma en uso es “big-endian”. Ésto asegura estar usando la codificación apropiada según el sistema operativo en uso.

kUniTypeNativeCharacters

Los datos son guardados en una variable binaria, donde cada byte es un carácter del juego de caracteres “Latin 1” según el sistema operativo en uso (Ansi, si se trata de Windows, MacRoman si es un Mac, e ISO-8859-1 si es Unix.

kUniTypeCharacter

Los datos son guardados en una variable de tipo carácter.

En los casos de kUniTypeAnsiThai, kUniTypeAnsiCentralEuropean, kUniTypeAnsiCyrillic, kUniTypeAnsiLatin1, kUniTypeAnsiGreek, kUniTypeAnsiTurkish, kUniTypeAnsiHebrew, kUniTypeAnsiArabic, kUniTypeAnsiBaltic, y kUniTypeAnsiVietnamese, los datos son guardados en una variable binaria, y contiene datos de tipo carácter, donde cada byte es codificado usándose para ello el conjunto de códigos ANSI estándar.

26 de febrero de 2014

De No-Unicode a Unicode (Parte 4 de 10)

Representación de caracteres

 

Dependiendo del tipo de letra/fuente y del sistema operativo en uso, un mismo carácter puede no ser siempre representado del mismo modo y lo mismo ocurrirá al trabajar con textos que requieren pares suplentes. En términos generales, los mejores resultados se obtendrá mediante la normalización del texto usando para ello la función nfc(), ya que (generalmente) los diferencias se producen con el uso de caracteres compuestos.

Introducción de caracteres


Para la introducción/edición de textos y siempre que sea posible se recomienda utilizar  normalización nfc(). Si tenemos caracteres compuestos entre los datos, se requerirán varias pulsaciones de teclas de desplazamiento izquierda/derecha para saltar uno de éstos caracteres y es posible que cuando copie texto sobre el portapapeles, éste no contenga después exactamente lo que parecía haberse copiado.

Omnis, lleva a cabo automáticamente la normalización NFC de los caracteres pegados desde el portapapeles, pero tenga en cuenta que esto no se producirá cuando el hecho suceda desde el cliente web.

Conversión de caracteres


Las funciones siguientes le permitirán convertir un carácter específico de entre un conjunto de caracteres (cadena) a su valor Unicode y lo mismo en sentido inverso.

  • unicode(cadena,posición[,valor-hex])
    devuelve el valor Unicode del carácter indicado en posición. La primera posición de cadena es 1. Si el valor bolean “valor-hex” es cierto (por defecto es falso) se obtendrá su representación en formato hexadecimal, en el formato:  'U+h'.
  • unichr(num1[,num2]…)
    devuelve una cadena formada por la concatenación de los códigos de caracteres Unicode suministrados. Cada código es un número o una cadena en la forma 'U+h', donde h está formado por los de 1-6 caracteres que representan un valor hexadecimal.

Estas funciones están disponibles tanto desde el lado del cliente remoto, como localmente. (si se intentasen utilizar con una versión no-Unicode de Omnis, se producirá un error, cualquier biblioteca desarrollada con una versión Unicode es incompatible con no-Unicode)

Identificador de configuración regional (LCID)


La función locale() devuelve el identificador de configuración regional (LCID) del sistema/máquina en uso. El LCID especifica el formato de los separadores de decimales, miles, listas, tipos de moneda, unidades de medida, fecha y orden de clasificación. La configuración regional se especifica a nivel de sistema operativo y se encuentra en la forma "idioma_país", donde idioma es el nombre ISO639, y el país el ISO3166. Por ejemplo, la configuración regional para el Reino Unido es: “en_GB”.

Comprobación versión Unicode


La función isunicode() devolverá verdadero, siempre y cuando la función sea ejecutada desde una versión Unicode de Omnis Studio. isunicode() también funciona desde el cliente web, e indica si es o no compatible Unicode.

19 de febrero de 2014

De No-Unicode a Unicode (Parte 3 de 10)

Comparando textos

Omnis utiliza dos tipos de comparación entre cadenas de caracteres:
  • Comparación entre cadenas con valores UTF-8, conocida como: comparación de caracteres.
  • Comparación de acuerdo a las reglas de entorno locales, indicadas en el fichero de datos de localización (localisation data file), en éste caso y antes de llevarse a cabo la comparación, los datos entrantes son normalizados. Esto se denomina como comparación nacional (National). El uso de “National” por parte del usuario, permitirá garantizar el correcto uso de los caracteres correspondientes a su localidad. Tenga en cuenta que el uso de “National” podrá hacer caso omiso de otras reglas de codificación superiores.
Deberá usarse la función natcmp() para realizar comparaciones de tipo “National”. Tenga en cuenta que dicha función no está disponible del lado del cliente Web.

Omnis también realiza comparación de textos por muchas motivos diferentes y en ocasiones muy diversas, pero a continuación mencionaremos las más importantes.
  • Al ordenar listas
  • Al realizar búsquedas en listas
  • Al manejar índices de archivos de datos (df1)
  • En expresiones, como por ejemplo en una sentencia “if”
En todos los casos Omnis soporta el uso de variables de carácter (UTF-8) y nacional (National).

Al ordenar listas

Cuando se usa el tipo carácter, Omnis utiliza la comparación de caracteres (UTF-8) y cuando se usa el tipo nacional, Omnis utiliza la comparación nacional (National).

Al realizar búsquedas en listas

Cuando se usa el tipo de carácter, Omnis utiliza la comparación de caracteres. En el caso de listas que contienen una columna de caracteres de tipo nacional se usará “National”. Tipos especiales de búsqueda, como por ejemplo, búsquedas mediante un cálculo, se trataran como de tipo carácter, sin embargo, podrá hacer uso de la función natcmp() como parte del cálculo, con el fin de forzar el uso de la comparación “National”.

Al manejar índices de archivos de datos (df1)

Si son declarados como de tipo “National”, se usara éste.

En expresiones

Para garantizar el correcto comportamiento de las expresiones donde se evalúen caracteres, debe previamente normalizar su valor mediante el uso de la función nfc(), nfd() (vistas en la parte II) o bien la función natcmp(), según le interese.