Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-05-2025
victor03 victor03 is offline
Miembro
 
Registrado: feb 2025
Posts: 50
Poder: 2
victor03 Va por buen camino
Leer lineas de consola de comandos

hola, tengo un programa que hice de consola el cual me devuelve unas líneas de comando que después yo leo y manejo según lo que me pongan, el porblema que yo tengo es a la hora de leer esas lineas,
y es que si hay un caracter especial 'ñ','á'... esa palabra me la deja en blanco, por lo que he visto el problema esta en 'OutputLine := WideString(Buffer) ; ' he probado a cambiar el wideString por string UTF8Encode... y no me han funcionado.

Código Delphi [-]
  RutaEXE := 'C:\SII\envioVerifactu\envioVerifactu.exe';
  Parametros := '"' + fichero + '" ' + CONTROLWCERT_HUELLA.AsString + ' "' + CONTROLWRUTA_VERIFACTU.AsString + '"';
  CommandLine := '"' + RutaEXE + '" ' + Parametros;

  LOG('EJECUTANDO: ' + CommandLine);

  try
    if CreateProcess(nil, PChar(CommandLine),
      nil, nil, True, 0, nil, nil, StartupInfo, ProcessInfo) then
    begin
        CloseHandle(WritePipe); // Solo lecturaG

        LOG('LEER LA SALIDA DEL PROCESO');
        repeat
          BytesRead := 0;
          ZeroMemory(@Buffer, SizeOf(Buffer));
          if ReadFile(ReadPipe, Buffer, SizeOf(Buffer) - 1, BytesRead, nil) and (BytesRead > 0) then
          begin
            Buffer[BytesRead] := #0;
            OutputLine := WideString(Buffer) ;     
            ConsolaSalida := ConsolaSalida + OutputLine;
            LOG(CONSOLAsALIDA);
          end;
        until BytesRead = 0;

Última edición por Neftali [Germán.Estévez] fecha: 07-05-2025 a las 16:14:19. Razón: Poner los TAGs correctos
Responder Con Cita
  #2  
Antiguo 07-05-2025
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.435
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
¿Con qué versión de Delphi estás trabajando?
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 08-05-2025
victor03 victor03 is offline
Miembro
 
Registrado: feb 2025
Posts: 50
Poder: 2
victor03 Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
¿Con qué versión de Delphi estás trabajando?
DELPHI 2005
Responder Con Cita
  #4  
Antiguo 08-05-2025
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.435
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Pensaba que tal vez era más antigua.
Tendrás que hacer pruebas cambiando codificación. Yo creo que puede ir por ahí...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 17-05-2025
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 360
Poder: 3
navbuoy Va por buen camino
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.
Responder Con Cita
  #6  
Antiguo 23-05-2025
victor03 victor03 is offline
Miembro
 
Registrado: feb 2025
Posts: 50
Poder: 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
Respuesta



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
Como copiar lineas de una consola? elmago00 Varios 7 06-08-2013 10:19:49
Leer 4 Lineas de dos Archivo .txt wcbs Varios 13 05-09-2012 15:05:36
ayuda ¿Como crear lineas verticales y horizontales en un programa tipo consola!! jeral15 Varios 5 13-06-2010 19:09:54
Leer salidas de consola para una GUI progmaq Varios 1 13-01-2005 15:56:14
Abrir COnsola y comandos del DOS sarga API de Windows 1 14-04-2004 04:30:01


La franja horaria es GMT +2. Ahora son las 05:56:29.


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