Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-07-2005
Berto2003 Berto2003 is offline
Miembro
 
Registrado: may 2003
Ubicación: Málaga
Posts: 59
Poder: 21
Berto2003 Va por buen camino
Ayudaaaa!!! Tabla ASCII: El carácter Ñ vs. carácter ¥

Hola a tod@s.

Me ha surgido una duda-problema referente al juego de caracteres que utiliza Delphi, el BDE e Interbase/Firebird. He visto que existen preguntas parecidas en los viejos foros pero no he encontrado la solución a mi problema. El caso es que tengo el siguiente programa de ejemplo en Delphi 7 (dentro del BDE Administrator, Configuración, System, INIT, LANGDRIVER tengo seleccionado: 'ascii' ANSI)

ShowMessage(char(165)); --> Muestra el carácter: ¥
ShowMessage(char(209)); --> Muestra el carácter: Ñ

De forma inversa:

ShowMessage(IntToStr(ord('¥'))); --> Da el valor: 165
ShowMessage(IntToStr(ord('Ñ'))); --> Da el valor: 209

Hasta ahora todo correcto. Pero cual es mi sorpresa que al realizar Alt+165 en el editor de Delphi o en el bloc de notas me sale Ñ , y no el carácter ¥. Sé que a partir del 128 son extendidos pero, ¿de qué depende esos caracteres extendidos? ¿Del driver de lenguaje del BDE? ¿De la configuración regional del equipo? Pero por otro lado, si consulto la tabla de caracteres ASCII para el 165 aparece la Ñ, y el ¥ es el 157 . ¿Se puede deber a la función char? Esta función creo que está en el SysUtils pero ¿es realmente del API de Windows?

Todo esto viene porque en un campo Varchar de una BD con Firebird a la que no se ha elegido charset (está a NONE), al consultar ese campo desde una aplicación realizada con Delphi 5 se muestra correctamente el carácter Ñ en la palabra 'ESPAÑA', pero al escribirlo a fichero ese carácter se graba como el carácter ¥ (apareciendo 'ESPA¥A') lo cuál nos acarrea muchos problema. ¿Puede ser por el AssignFile y el tipo TextFile? Por favor, si os ha surgido a vosotr@s algo parecido y lo habeis solucionado os agradecería que me lo dijéseis.

Muchas gracias y hasta luego,
Berto2003
Responder Con Cita
  #2  
Antiguo 23-07-2005
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
Te Recomiendo....

Primeramente te recomiendo que cuando Declares un Campo de Tipo Varchar le cambias a Collate = ES_ES y CharSet = ISO8859_1, ahora si quieres hacer una Busqueda por Descripción y en esta busqueda le pasas una letra Ñ siendo que en la base de datos esta registrada como ¥ , hay una función que te convierte este último caracter a la letra Ñ :
Código Delphi [-]
//Permite Cambiar Caracteres No Permitidos en Consultas como ¥=Ñ
function AnSi2Ascii(AText:string):string;
const MaxLength = 255;
var PText : PChar;
begin
  PText:=StrAlloc(MaxLength);
  StrPCopy(PText,AText);
  {$IFDEF WIN32}
  CharToOEM(PText,PText); {32Bit}
  {$ELSE}
  AnsiToOEM(PText,PText); {16Bit}
  {$ENDIF}
  Result:=StrPas(PText);
  StrDispose(PText);
end;

Espero te sirva....
Saludos.
Responder Con Cita
  #3  
Antiguo 23-07-2005
Berto2003 Berto2003 is offline
Miembro
 
Registrado: may 2003
Ubicación: Málaga
Posts: 59
Poder: 21
Berto2003 Va por buen camino
Gracias pero..

Gracias AGAG4 pero he ejecutado la función de la siguiente manera y me ha salido lo siguiente:

procedure TForm1.Button5Click(Sender: TObject);
begin
ShowMessage(Ansi2Ascii('ESPA¥A')); --> ESPA¾A
end;

El carácter ¾ me sale como el 190, pero no corresponde con el ASCII de la tabla que tengo.


Gracias de nuevo,
Un saludo.
Responder Con Cita
  #4  
Antiguo 23-07-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
esa letra me pasaba lo mismo pero con tablas paradox y el BDE, cambiando el driver del lenguaje a "pdox intl 850" se solucionó, pero claro es paradox.

intl 850 = "tabla de códigos internacional, número 850"

Suerte
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #5  
Antiguo 25-07-2005
Berto2003 Berto2003 is offline
Miembro
 
Registrado: may 2003
Ubicación: Málaga
Posts: 59
Poder: 21
Berto2003 Va por buen camino
Voy a probar

Gracias Lepe, voy a probar ahora mismo.


Un saludo
Responder Con Cita
  #6  
Antiguo 26-07-2005
Berto2003 Berto2003 is offline
Miembro
 
Registrado: may 2003
Ubicación: Málaga
Posts: 59
Poder: 21
Berto2003 Va por buen camino
De nuevo el carácter ¥...

Hola de nuevo,

He probado cambiando el LANGDRIVER, pero ahora me surge el problema de que algunos equipos el carácter Ñ me sale como ¥ y en otros como #... vamos, ya no sé que pensar. Lo que se realiza, no sé si lo comenté ya, es un SaveToFile de un TStringList. Antes de ello se realiza una sustitución del carácter Ñ por '#165' de la siguiente manera:

while Pos('Ñ', Cadena) > 0 do
Cadena[Pos('Ñ', Cadena)] := #165;
...

MiLista.SaveToFile(nombre_de_fichero);

¿Puede ser que según este LANGDRIVER sea por lo que sale el ¥ o la #? Bueno, espero haberme explicado bien, y no haberos liado mucho. Gracias de antemano a tod@s.


Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 12:01:34.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi