Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-11-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.142
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Pero no está demás saberlo hacer como tú lo sabes hacer Domingo. De hecho yo utilizo Delphi 7 y me huelo que la función susomentada no está disponible en versiones anteriores de Delphi.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #2  
Antiguo 23-11-2006
Flecha Flecha is offline
Miembro
 
Registrado: nov 2006
Posts: 59
Poder: 20
Flecha Va por buen camino
Muchísimas gracias a los dos.

Por cierto, mi programa está hecho en Delphi 5 así que, efectivamente, UTF8Decode y UTF8ToAnsi no las tengo disponibles.

He probado el curradísimo procedimiento de seoane, y no tengo buenas noticias. El programa se queda tonto cuando se ejecuta la línea
Código Delphi [-]
Result:= WideString(Str);

De todos modos, y como comenta dec, ¿funcionaría tambien si el formato del archivo no es UTF8?
¿Hay alguna forma de saber qué formato tiene el archivo antes de cargarlo para así saber exactamente con qué procedimiento leer sus datos?
Responder Con Cita
  #3  
Antiguo 23-11-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
Prueba con esto:
Código Delphi [-]
function LoadUTF8FromFile(Filename: string): WideString;
var
  Stream: TMemoryStream;
  Size: Integer;
  Str: PWChar;
begin
  Result:= '';
  Stream:= TMemoryStream.Create;
  try
    Stream.LoadFromFile(Filename);
    Size:= MultiByteToWideChar(CP_UTF8,0,Stream.Memory,
      Stream.Size,nil,0);
    if Size > 0 then
    begin
      GetMem(Str,(Size+1)*Sizeof(WideChar));
      FillChar(Str^,(Size+1)*Sizeof(WideChar),#0);
      try
        if MultiByteToWideChar(CP_UTF8,0,Stream.Memory,
           Stream.Size,Str,Size) > 0 then
        begin
          Result:= WideString(Str);
        end;
      finally
        FreeMem(Str);
      end;
    end;
  finally
    Stream.Free;
  end;
end;
Responder Con Cita
  #4  
Antiguo 11-06-2007
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Yo he estado haciendo unas pruebas de la siguiente manera

En un fichero Ms-Dos pongo distintos textos, con eñes, acentos etc,. lo cargo a un memo:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.LoadFromFile('E:\Pruebas\Fichero.txt');
end;

procedure TForm1.Button2Click(Sender: TObject);
var
s:Pchar;
begin
OemToChar(PChar(Memo1.Lines[2]),PChar(s));
ShowMessage(s);
end;

Y luego con la función OemToChar me lo convierte perfectamente, el ejemplo es muy simple pero no tengo tiempo para más.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #5  
Antiguo 11-06-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
Creo que el caso que describes marcos es diferente, en tu caso el problema es que el archivo utiliza un juego de caracteres diferente al que usa windows, mientras que, segun lo entiendo yo, el problema en en este caso es que se utiliza una codificacion diferente.

De todas formas, esto ¿seguro que te funciona? :
Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
s:Pchar;
begin
OemToChar(PChar(Memo1.Lines[2]),PChar(s));
ShowMessage(s);
end;
Porque ahí s esta apuntando a una posición de memoria aleatoria, no a ningún buffer, al menos eso me parece a mi.
Responder Con Cita
  #6  
Antiguo 19-06-2007
Flecha Flecha is offline
Miembro
 
Registrado: nov 2006
Posts: 59
Poder: 20
Flecha Va por buen camino
Gracias de nuevo a todos.
Al final decidí cortar por lo sano.
Yo necesitaba un sistema lector "universal" de archivos de texto. De forma que independientemente del formato en que fuese creado el archivo de texto (ASCI, UTF8, etc), yo pudiera leer el contenido sin que hubiese varianción en los caracteres.
Pero como no había manera de lograrlo decidí exigir a la empresa que nos manda los archivos de texto, que nos los mande en el formato correcto.

Última edición por Flecha fecha: 19-06-2007 a las 10:39:18.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ventana MDI, "Siempre visible" y "Pantalla completa" ixMike API de Windows 7 11-04-2007 18:36:55
¿cuál es mejor: "close" o "application.terminate"? unreal4u Varios 5 05-03-2007 11:01:19
"ChequeaEsto" elegido el futuro "Killer CLubDelphi" mamcx Noticias 51 31-10-2006 20:56:32
porque no me reconoce los caracteres "*" ni "%" cuando filtro mrmago Conexión con bases de datos 10 27-01-2006 04:21:16


La franja horaria es GMT +2. Ahora son las 07:58:23.


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