| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Alpinador Lt Cmdr

Registrado: 21 Abr 2014Mensajes: 123
|
Publicado: Sab 17 Ago, 2019 11:47 pm Asunto: los malditos acentos no salen |
|
|
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 |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Lun 19 Ago, 2019 4:57 am Asunto: |
|
|
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()); |
_________________
 |
|
| Volver arriba |
|
 |
Alpinador Lt Cmdr

Registrado: 21 Abr 2014Mensajes: 123
|
Publicado: Lun 19 Ago, 2019 5:48 pm Asunto: |
|
|
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 |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Lun 19 Ago, 2019 7:16 pm Asunto: |
|
|
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. _________________
 |
|
| Volver arriba |
|
 |
Alpinador Lt Cmdr

Registrado: 21 Abr 2014Mensajes: 123
|
Publicado: Mar 20 Ago, 2019 12:51 am Asunto: |
|
|
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 |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mar 20 Ago, 2019 1:31 am Asunto: |
|
|
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. _________________

Ultima edición por Cesar C. Salazar Gonzalez el Lun 14 Oct, 2019 9:03 am, editado 2 veces |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mar 20 Ago, 2019 1:35 am Asunto: |
|
|
Por ultimo prueba la siguiente linea de esta manera
| Código: | Memo1->Lines->Add( UTF8String(AMessage).c_str() ); <-- esto debe convertirlo |
_________________
 |
|
| Volver arriba |
|
 |
Alpinador Lt Cmdr

Registrado: 21 Abr 2014Mensajes: 123
|
Publicado: Lun 28 Oct, 2019 1:11 pm Asunto: |
|
|
| 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 |
|
 |
|