Etiqueta

12 de marzo de 2014

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

El componente FormFile


Las propiedades $filereadencoding y $filewriteencoding del componente FormFile, introducido en la versión 4.0 de Studio, fueron modificadas en la versión 4.1, de modo que la constante kFFEncoding permitiese el uso del grupo kUniType… y poder así indicar la codificación del archivo. En el caso de la propiedad $filereadencoding podrán usarse todas las constantes del grupo excepto kUniTypeCharacter, y en el caso de la propiedad $filewriteencoding excepto kUniTypeAuto y kUniTypeCharacter .

Además, también se dispone de una constante kUniTypeBinary para identificar los archivos que se tratarán como datos binarios sin procesar, el código antiguo sigue estando soportado.

El componente Fileops


El componente Fileops contiene dos nuevos métodos, $readcharacter() y $writecharacter(), que permiten la lectura y/o escritura de datos en formato Unicode.
  • $readcharacter(encoding,variable) Lee un fichero almacenando sus caracteres en variable; encoding podrá ser una constante del grupo kUniType…, excepto kUniTypeBinary o kUniTypeCharacter.

  • $writecharacter(encoding,variable) Sustituye el contenido del archivo, con los datos  de variable; encoding podrá ser una constante del grupo kUniType…, excepto kUniTypeAuto, kUniTypeBinary o kUniTypeCharacter.

Cuando se usan las opciones Import/Export y Report File


Es posible especificar la codificación de los archivos de texto que se generan al usarse las opciones de importación y exportación, así como al enviar un informe a un archivo de texto, esto podrá hacerse mediante las propiedades $importencoding y $exportencoding:
  • $importencoding Especifica la codificación que se utilizará para los datos importados, tanto al importar desde un puerto, como cuando el archivo de importación no contiene una cabecera Unicode BOM. Podrá usarse cualquiera de las constantes del grupo kUniType..., con excepción de kUniTypeAuto, kUniTypeCharacter, kUniTypeBinary y las kUniTypeUTF32….

  • $exportencoding Especifica la codificación que se utilizará en la exportación de datos, tanto al imprimir sobre un puerto o sobre un archivo de texto. Podrá usarse cualquiera de las constantes del grupo kUniType..., con excepción de kUniTypeAuto, kUniTypeCharacter y kUniTypeBinary.

  • $exportbom Si es “true”, indicará que la propiedad $exportencoding deberá usar una codificación Unicode, se creará la marca Unicode BOM al inicio del archivo de salida.

Todas éstas propiedades pueden ser localizadas entre las preferencias Omnis ($root.$prefs). Cuando se trata de un servidor multi-hilo, existirá un valor separado para cada una de estas propiedades, en correspondencia con cada hilo.

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.