Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

los malditos acentos no salen

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: los malditos acentos no salen Responder citando

hola, estoy trabajando con el IRC componente y cuando recibo los mensajes del canal de chat, los acentos y caracteres especiales me muestra una "?" como con un cuadradito negro y no se como hacer para que muestre los acentos

alguien sabe como solucionarlo??? la cadena que trae los datos a la funcion es Unicode String y donde muestro los datos un Memo
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Intenta usar la siguiente forma para agregar las lineas que contienen caracteres UTF8

Código:
Memo1->Lines->Add(UTF8String(Texto));

o bien esta otra manera

Código:
Memo1->Lines->Add(TEncoding::UTF8->GetString(Texto));


Saludos!!

En algunos casos puede pedirte que la cadena se convierta de la siguiente manera, usando c_str() o w_str()

Código:
Memo1->Lines->Append(TEncoding::UTF8->GetString(Texto).c_str());

_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

el primer codigo compila pero no hace nada....siguen saliendo los rombitos con la interrogacion en los acentos

las otras 2 formas dice que no funciona y da error al compilar

he encontrado este codigo que parece que es para convertir pero no se

Código:

/*
This example reads any file and converts the encoding to UTF8.
This example uses the TBytesStream to read the files into a TBytes'
and also uses the auto_ptr construction to clean up created class
instances.

*/
#include <tchar.h>
#include <memory>       //for STL auto_ptr class
//---------------------------------------------------------------------------

#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
  // Sample to convert a file of any encoding to UTF8.
  TEncoding *LEncoding = NULL;
  std::auto_ptr<TFileStream> LFileStream(new TFileStream("..\\Sample.txt", fmOpenRead));

  // Read file into buffer
  TBytes myBytes;
  std::auto_ptr<TBytesStream> myBytesStream(new TBytesStream(myBytes));
  myBytesStream->CopyFrom(LFileStream.get(), LFileStream->Size);

  // Identify encoding and convert buffer to UTF8
  int LOffset = TEncoding::GetBufferEncoding(myBytesStream->Bytes, LEncoding);
  if (LOffset == 0)
    return 1; // Unknown encoding, don't convert.
  myBytes = TEncoding::Convert(LEncoding, TEncoding::UTF8,
                               myBytesStream->Bytes,
                               LOffset, myBytesStream->Size-LOffset);
  // Create output file
  std::auto_ptr<TFileStream> DestFileStream(new TFileStream("..\\SampleUTF8.txt", fmCreate));

  // Write UTF8 byte order mark and buffer to output file
  TBytes LByteOrderMark;
  LByteOrderMark = TEncoding::UTF8->GetPreamble();

  // Grab preamble and write to destination
  DestFileStream->Write(&LByteOrderMark[0], LByteOrderMark.Length);

  // Write converted buffer
  DestFileStream->Write(&myBytes[0], myBytes.Length);
  return 0;
}
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Puedes darme mas detalle sobre como recibes la información y el método que usas para insertarlo en el Memo.

El código anterior, es similar a lo que las dos rutinas anteriores he mencionado, te comento esto ya que al realizar algo similar y los códigos con acento y la "ñ" funcionan perfectamente bien.

Saludos.
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

es el componente Indy idIRC..... en uno de los eventos viene el mensaje que escriben en el canal como CONST Unicode String *AMessage .....

lo inserto con Memo->Lines->Add(AMessage); y salir el mensaje sale pero no los acentos ni caracteres especiales..... es como si no tuviese bien la CODE PAGE Ascii o algo asi pero el teclado y windows lo tengo en español y en notepad o cosas asi si salen los acentos y Ñ
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Estos son los únicos tres métodos que usan "AMessage" dentro de sus parámetros.

Código:
//---------------------------------------------------------------------------
void __fastcall TForm1::IdIRC1PrivateMessage(TIdContext *ASender, const UnicodeString ANickname,
        const UnicodeString AHost, const UnicodeString ATarget,
        const UnicodeString AMessage)
{

}
//---------------------------------------------------------------------------
void __fastcall TForm1::IdIRC1Raw(TIdContext *ASender, bool AIn, const UnicodeString AMessage)
{

}
//---------------------------------------------------------------------------
void __fastcall TForm1::IdIRC1Wallops(TIdContext *ASender, const UnicodeString ANickname,
        const UnicodeString AHost, const UnicodeString AMessage)
{

}
//---------------------------------------------------------------------------


En cualquiera de todos los casos, estas recibiendo la información por medio de la propiedad IOHandler, la cual debe contener cierta configuración para que puedas recibir los datos en UTF8

Código:
//Al inicio de tu configuracion
   this->IdIRC1->IOHandler->DefStringEncoding =  IndyTextEncoding_UTF8();




Recuerda que los componentes Indy usan ASCII por compatibilidad con muchos otros protocolos por internet.

Y una opción para que el "cliente" o quien te envía el texto es el siguiente.

Código:
   this->IdIRC1->IOHandler->WriteLn("César Cuauhtémoc", IndyTextEncoding_UTF8() ); <-- Te envian el texto


Es probable que la aplicación que te envía los datos los está enviando en formato Ansi.
_________________
Cool


Ultima edición por Cesar C. Salazar Gonzalez el Lun 14 Oct, 2019 9:03 am, editado 2 veces
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Por ultimo prueba la siguiente linea de esta manera

Código:
   Memo1->Lines->Add( UTF8String(AMessage).c_str() ); <-- esto debe convertirlo

_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

ya lo solucione Cesar..... justamente era ponerlo como AnsiString(AMessage) pero gracias por tus consejos, tambien pueden valer para otras cosas con el tema UTF8
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.