Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   UTF8 La maldicion (https://www.clubdelphi.com/foros/showthread.php?t=66966)

Softweb 22-03-2010 17:30:15

UTF8 La maldicion
 
Hola a todos.

Tengo una aplicación ya muy currada que me tiene pillados mas de un mes con el siguiente problema.

Tengo una variable de tipo WideString que contiene un texto en formato UTF8 y tengo que pasarlo a una variable string pero con los caracteres de acentuados correctamente y no encuentro la forma de transformar los caracteres el string (ansi).

E usado sin éxito:
Utf8ToAnsi
UTF8Encode
UTF8Decode
WideCharToString
WideStringToStringEx


Rogaría me contestaran aunque solo sea para darme una pista.

Saludos

yapt 22-03-2010 20:35:15

Seguro que ya has probado esto, pero en Delphi 2010, a mí me funciona bien.
Código Delphi [-]
var
  a : AnsiString;
  s : WideString;
begin
 s := 'Avión';
 a := AnsiString(s); 
end;

De hecho también funcionaría así:

Código Delphi [-]
  s := 'Avión';
  a := s;

No sé... si tienes alguna pista más....

Saludos.

Softweb 25-03-2010 10:52:35

Cita:

Empezado por yapt (Mensaje 357807)
Seguro que ya has probado esto, pero en Delphi 2010, a mí me funciona bien.
Código Delphi [-]var a : AnsiString; s : WideString; begin s := 'Avión'; a := AnsiString(s); end;


De hecho también funcionaría así:

Código Delphi [-] s := 'Avión'; a := s;


No sé... si tienes alguna pista más....

Saludos.

Gracias yapt por responder, ya lo e solucionado gracias a una pista sobre la función MultiByteToWideChar, e creado una función para la conversión.

Código Delphi [-]
function UTF8ToWideString(const S: AnsiString): WideString;
var
  BufSize: Integer;
begin
  Result := '';
  if Length(S) = 0 then Exit;
  BufSize := MultiByteToWideChar(CP_UTF8, 0, PAnsiChar(S), Length(S), nil, 0);
  SetLength(result, BufSize);
  MultiByteToWideChar(CP_UTF8, 0, PANsiChar(S), Length(S), PWideChar(Result), BufSize);
end;

Saludos y gracias por responder

yapt 25-03-2010 13:45:39

Ok...

me doy cuenta ahora de que no indicabas la versión de Delphi con la que estás trabajando.

El tema es que en Delphi 2009 y 2010 todo el trabajo con UTF8 ya está muy "elaborado".

Pero si son versiones anteriores, entonces es cuando tienes que usar funciones como la que describes...

Supongo que es por eso...

Saludos y suerte... :-)


La franja horaria es GMT +2. Ahora son las 09:46:58.

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