Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

 
 
Herramientas Buscar en Tema Desplegado
  #4  
Antiguo 12-07-2025
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 360
Poder: 3
navbuoy Va por buen camino
SOLUCION DESDE DELPHI (funcion añadida)

1. Leer el archivo como texto.
2. Detectar y eliminar el BOM si está presente.
3. Guardar el contenido como UTF-8 sin BOM.

¿Qué es el BOM?
El BOM (Byte Order Mark) en UTF-8 son los tres primeros bytes del archivo:

CÓDIGO EJEMPLO EN DELPHI

Código Delphi [-]
procedure ConvertUTF8BOMtoUTF8NoBOM(const InputFile, OutputFile: string);
var
  FileStream: TFileStream;
  StringStream: TStringStream;
  BOM: array[0..2] of Byte;
begin
  FileStream := TFileStream.Create(InputFile, fmOpenRead or fmShareDenyWrite);
  try
    // Leer los 3 primeros bytes para detectar el BOM
    FileStream.ReadBuffer(BOM, 3);

    if (BOM[0] = $EF) and (BOM[1] = $BB) and (BOM[2] = $BF) then
    begin
      // Si tiene BOM, creamos un TStringStream con el resto del contenido
      StringStream := TStringStream.Create('', TEncoding.UTF8);
      try
        StringStream.CopyFrom(FileStream, FileStream.Size - 3);
        StringStream.SaveToFile(OutputFile, TEncoding.UTF8); // guarda sin BOM
      finally
        StringStream.Free;
      end;
    end
    else
    begin
      // No tenía BOM, así que copiamos tal cual
      FileStream.Position := 0;
      StringStream := TStringStream.Create('', TEncoding.UTF8);
      try
        StringStream.CopyFrom(FileStream, FileStream.Size);
        StringStream.SaveToFile(OutputFile, TEncoding.UTF8); // guarda sin BOM
      finally
        StringStream.Free;
      end;
    end;
  finally
    FileStream.Free;
  end;
end;

Cómo usarlo:

Código Delphi [-]
ConvertUTF8BOMtoUTF8NoBOM('C:\Ruta\archivo_original.ini', 'C:\Ruta\archivo_sin_BOM.ini');

o puedes incluso sobreescribirlo si quieres:

Código Delphi [-]
ConvertUTF8BOMtoUTF8NoBOM('C:\Ruta\mi_archivo.ini', 'C:\Ruta\mi_archivo.ini');

Esa línea:

Código Delphi [-]
if (BOM[0] = $EF) and (BOM[1] = $BB) and (BOM[2] = $BF)

lo que hace es detectar los tres primeros caracteres del archivo codificados como bytes y comprobar si coinciden con la marca BOM de UTF-8, que son estos tres bytes hexadecimales:

$EF = 239 = ï

$BB = 187 = »

$BF = 191 = ¿

Entonces, si ese BOM se interpreta como texto (por ejemplo, en un Memo.Lines.Text), lo que vas a ver es:

Código Delphi [-]


Esos son los caracteres raros que ves al principio de muchos archivos .ini, .txt, .json, etc., guardados como UTF-8 con BOM.

Última edición por navbuoy fecha: 12-07-2025 a las 17:41:06.
Responder Con Cita
 



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
Caracteres raros al capturar fichero txt comba Varios 4 07-09-2010 17:59:07
caracteres raros en delphi unko! Varios 7 19-12-2006 11:56:34
Caracteres raros al imprimir reporte joserobertorc Impresión 0 07-01-2005 21:22:18
Caracteres Raros en Impresora de Tickets muli Impresión 7 16-04-2004 21:13:11
Caracteres raros con dbase kes Conexión con bases de datos 4 09-07-2003 20:05:15


La franja horaria es GMT +2. Ahora son las 01:51:20.


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