Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-07-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Vaya, eso es de 2015.
Se me ocurre que también puedes hacer una sustitución de las ñ,á,é,í,ó,ú antes de importar las líneas.
Responder Con Cita
  #2  
Antiguo 19-07-2019
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Poder: 11
bucanero Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Vaya, eso es de 2015.
Se me ocurre que también puedes hacer una sustitución de las ñ,á,é,í,ó,ú antes de importar las líneas.
Gracias Casimiro!! es la solución que al final he implementado. No es la mas optima, puesto que si el fichero en algún momento incluye otros caracteres en UTF8 tendré entonces que modificar nuevamente el código. Pero de momento me sirve como solución.

Aquí dejo el código que he implementado:

Código Delphi [-]

function UTF8ToAnsii(const value: string): string;
/// convierte los caracteres codificados en UTF8 a ANSI
const
  SpecialChars: array[0..5] of string = ('ñ', 'á', 'é', 'í', 'ó', 'ú');
var
  i: LongInt;
begin
  result := value;
  for i := 0 to High(SpecialChars) do
    result := StringReplace(result,
         // caracter especial en codificacion UTF8
      SpecialChars[i],
         // el mismo caracter en codificacion ANSII
      TEncoding.ANSI.GetString(TEncoding.UTF8.GetBytes(SpecialChars[i])), [rfReplaceAll]);
end;

function RepairFileUTF8(const AFileName: string): boolean;
/// Lee un fichero en formato ANSI y lo escribe en formato UTF8
var
  content: string;
begin
  try
    result := false;
    // lee el contenido del fichero en formato ANSII
    content := Tfile.ReadAllText(AFileName);
    //Sustituye los caracteres especiales codificados en UTF8 a codificacion ANSII
    // y convierte todo el contenido del fichero a UTF8
    content := UTF8Decode(UTF8ToAnsii(content));
    // guarda de nuevo el fichero ya con formato UTF8
    Tfile.WriteAllText(AFileName, content, TEncoding.UTF8);
    result := true;
  except
    on E: Exception do
      MessageDlg(E.message, mtError, [mbOK], 0);
  end;
end;

function IsValidUTF8Format(const AFileName: string): Boolean;
var
  intento: integer;
begin
  result := false;
  intento := 2;
  repeat
    try
      dec(intento);
      // se intenta leer el contenido del fichero en formato UTF8
      Tfile.ReadAllText(AFileName, TEncoding.UTF8);
      result := true;
    except
      on E: Exception do begin
        if (e.Message = SNoMappingForUnicodeCharacter) then begin
          if (intento > 0) then
            //si da error se intenta reparar. (solo lo hace la primera vez)
            RepairFileUTF8(AFileName)
          else
            // si diera error por segunda vez segunda vez, es porque el fichero
            // contiene mas caracteres especiales no incluidos en la lista de sustitucion
            MessageDlg('Revise caracteres especiales UTF8 en el fichero', mtError, [mbOK], 0);
        end;
      end;
    end;
  until result or (intento <= 0);
end;

y la forma de utilizarlo es:
Código Delphi [-]
  if not IsValidUTF8Format(NameFile) then
    MessageDlg('El fichero no tiene un formato valido ', mtError, [mbOK], 0)
  else
    OpenFile(NameFile);


Gracias por vuestro tiempo y las soluciones aportadas.
Un saludo
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
Leer fichero con caracteres cirilicos en Delphi 6 jruinie Varios 5 06-02-2015 22:29:46
Agregar múltiples Campo de una tabla a múltiples TEdit y TdbEdit novato_erick Varios 21 21-08-2011 01:18:58
como generar ventas multiples (seleccionar multiples items) userdelphi Varios 4 30-12-2010 02:52:21
Caracteres raros al capturar fichero txt comba Varios 4 07-09-2010 17:59:07
Comparar cadenas de caracteres sacadas de un fichero papulo Varios 20 22-12-2006 14:43:33


La franja horaria es GMT +2. Ahora son las 08:02:46.


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