Forum > Spanish

Error en declaración de conjunto de caracteres

(1/2) > >>

Dperdi:
Hola.

Tengo esta declaración


--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---LetrasValidas: set of Char = ['A'..'Z','a'..'z','á','à','é','è','í','ó','ò','ú','Ñ','ñ','0'..'9','_','.','ä','Ä','ö','Ö','ü','Ü','Á','À','É','È','Í','Ó','Ò','Ú','ß'];
Pero me está dando error en la 'á'. El error que me arroja al compilar son dos:
xxxx.pas(81,23) Error: Incompatible types: got "WideChar" expected "Char"
xxxx.pas(81,168) Error: Illegal expression

Yo entiendo que algunos carateres puedan estar fuera del rango de 0..255 pero la 'á' no está fuera de ese rango. ¿Alguna idea de porqué pasa esto?

Desde ya gracias y saludos

440bx:

--- Quote from: Dperdi on March 20, 2024, 09:50:49 am ---xxxx.pas(81,23) Error: Incompatible types: got "WideChar" expected "Char"
xxxx.pas(81,168) Error: Illegal expression

Yo entiendo que algunos carateres puedan estar fuera del rango de 0..255 pero la 'á' no está fuera de ese rango. ¿Alguna idea de porqué pasa esto?

--- End quote ---
La razon es que para representar la 'á' el compilador va a usar un "widechar" que son dos (2) bitios (bytes.) Eso ocasiona el problema porque terminos en un conjunto solo pueden ser representados por un solo bitio (byte) y un "widechar" usa dos.

Una possibilidad es reemplazar la 'á' por su ordinal #160 or #225 pero como esos characteres no son ascii, su representation depende del codigo de pagina, por lo tanto no hay guarantia que usando el ordinal va a dar el caracter deseado.

Edson:
Por defecto Free Pascal y Lazarus, trabaja en condificación UTF-8. Y en UTF-8, los caracteres como "á" o "ñ" usan dos bytes de almacenamiento.

Si lo que deseas es representar a un código del formato ASCII extendido, en donde la "é" tiene el código #130, es mejor que lo pongas con ese código. Pero, como ya te indicaron, esa codificación es relativa al código de página del ASCII extendido.

Además, dentro del mundo de Lazarus , como en el mundo de la Web, casi todo se maneja en UTF-8 que es más universal.

Dperdi:
Hola Edson y 440bx.

Gracias por sus comentarios. He probado declarar como widechar y ahora obtengo este error: "rpparser.pas(76,33) Error: illegal type declaration of set elements" y ahora si quedé perdido.

Si tienen alguna otra sugerencias por supuesto que estoy agradecido desde ya.

Saldudos!

440bx:

--- Quote from: Dperdi on March 20, 2024, 09:49:55 pm ---Hola Edson y 440bx.

Gracias por sus comentarios. He probado declarar como widechar y ahora obtengo este error: "rpparser.pas(76,33) Error: illegal type declaration of set elements" y ahora si quedé perdido.

Si tienen alguna otra sugerencias por supuesto que estoy agradecido desde ya.

Saldudos!

--- End quote ---
De nada.

El problema es que los elementos the un conjunto (set) tienen que ser representados por un solo byte.  Un conjunto no puede tener elementos que requieren dos bytes que es lo que require un widechar.  Por lo tanto no se puede definir un conjunto de widechar(s).

Puedes declarar widechar caracteres pero no puedes definir un conjunto que contiene o consiste de esos caracteres (porque requiren dos bytes.)

Navigation

[0] Message Index

[#] Next page

Go to full version