Ver Mensaje Individual
  #6  
Antiguo 23-05-2025
victor03 victor03 is offline
Miembro
 
Registrado: feb 2025
Posts: 50
Reputación: 2
victor03 Va por buen camino
Cita:
Empezado por navbuoy Ver Mensaje
El problema esta en esta linea:

Código Delphi [-]
OutputLine := WideString(Buffer);

Ese cast no convierte correctamente texto con acentos o caracteres especiales si el texto viene codificado en UTF-8

Tienes que reemplazar esa línea con una conversión correcta desde UTF-8 a WideString, usando UTF8Decode, que está disponible en Delphi 2005.

Modifica esto:

Código Delphi [-]
OutputLine := WideString(Buffer);
ConsolaSalida := ConsolaSalida + OutputLine;
LOG(CONSOLAsALIDA);

por esto:

Código Delphi [-]
var
  TempStr: UTF8String;
begin
  SetString(TempStr, Buffer, BytesRead);
  OutputLine := UTF8Decode(TempStr); // Convierte UTF8 → WideString
  ConsolaSalida := ConsolaSalida + OutputLine;
  LOG(OutputLine); // También puedes loguear solo lo nuevo

Si sabés que no está usando UTF-8, sino una codificación ANSI típica (como Latin1 / Windows-1252), utiliza esto en su lugar:

Código Delphi [-]
OutputLine := AnsiToWide(Buffer);

Pero en general, UTF-8 es lo estándar moderno, así que UTF8Decode() es lo más seguro.
Hola

creo que uso Latin1 el problema es que parece que la función AnsiToWide no esta en delphi 2005, le he preguntado al chatgpt y me ha montado una función pero no ha funcionado

aun así, después he probado lo del utf8Decode me ha preguntado: contains international characters. Do you wish to save this file in UTF8 encoding? If you choose 'NO', the international characters will be lost. le he dicho que 'yes' y el programa ha seguido funcionando, el decode ha funcionado a la hora de escribir en el log hasta que ha llegao a la linea que tiene un acento y la ha dejado en blanco:


Cita:
23/05/2025 13:39:37: utf8->
23/05/2025 13:39:37: WideString(AnsiToWide(Buffer))-> FACTURA|1/250090|Incorrecto|1124|El valor del campo TipoImpositivo no est* incluido en la lista de valores permitidos.
Responder Con Cita