![]() |
Indy TIdIRC Umlaute
Ich benutze Indy 10 und Delphi XE und dort die Komponente TIdIRC.
Wenn ich nun über IRC eine Nachricht mit Umlauten schicke, dann kommt totaler Müll an in dem Event "IRCPrivateMessage". Beispiel. Ich schicke von einem anderen IRC-Client aus das Zeichen 'ä' und es kommt an "C$". Hier sieht man es noch mal genauer: ![]() Woran kann das liegen? Was kann ich dagegen tun? |
AW: Indy TIdIRC Umlaute
Aktuelles Build von Indy?
AFAIK gabs/gibts noch ein paar Bugs mit Unicode/Sonderzeichen |
AW: Indy TIdIRC Umlaute
Hmm. Wo kann ich das nachgucken?
Ich kann natürlich versuchen das neueste Indy 10 zu installieren. Das probiere ich mal, danke. Trotzdem. Kann einer erkennen, was da schiefläuft? Und ob es ein Workaround gibt? |
AW: Indy TIdIRC Umlaute
Ich habe leider dasselbe Problem mit der wirklich neuesten Version (10-4924 von gestern) und den TCPIP-Komponenten. Hässlich, aber plotzlich werden da z.B. bei einem IdTCPClient.SendCmd keine Umlaute mehr übermittelt, resp. beim Server kommen Fragezeichen an.
Das hat mit der früheren Version von Indy 10 noch funktioniert. Ich habe mir jetzt folgendermassen beholfen, hoffe aber, ich könne das irgendwann wieder raus schmeissen.
Code:
IdTCPClient.SendCmd(Umlaute(Puffer, False), 200);
Code:
Die Funktion setzt mit False alles in Hex-Notation um und mit True auf der Gegenseite wieder zurück.
{Umlaute in Sende-Puffer umsetzen}
function TAServer1.Umlaute(InPuf: string; Read: boolean): string; var i : integer; begin result := ''; if not Read then begin for i := 1 to length(InPuf) do result := result + String(IntToHex(Ord(InPuf[i]), 2)); end else begin while length(InPuf) <> 0 do begin Result := Result + Char(StrToInt('$' + copy(InPuf,1, 2))); InPuf := copy(InPuf, 3, length(InPuf) - 2); end; end; end; Aber vielleicht hat ja jemand eine bessere Lösung. Irgendwie habe ich das Gefühl, man müsse vermütlich den Indys nur irgendwo das richtige Character Set beibringen, aber ich habe keine Ahnung, wo. |
AW: Indy TIdIRC Umlaute
Hey,
wie mein Vorredner schon sagte, habe ich die Probleme selbst mit den neusten Indys. Dein Ansatz funktioniert in meinem Fall leider nicht, weil ich ja nicht die IRC Server umprogrammieren kann zu denen ich mich verbinde. :( |
AW: Indy TIdIRC Umlaute
Ich würde den Versuch machen die Textcodierung zu setzen.
@hesch21 SendCmd(InPuf, 200, TIdTextEncoding.GetEncoding(1250)) @Neotracer Bei der IRC-Komponente würde ich versuchen beim IOHandler.DefStringEncoding mal TIdTextEncoding.UTF8 oder TIdTextEncoding.GetEncoding(1250) zu setzen. Wenn ich den Quelltext richtig analysiert habe, müsste dort IndyASCIIEncoding gesetzt sein. |
AW: Indy TIdIRC Umlaute
@samso:
Vielen vielen Dank! Hat funktionier! So habe ich es gemacht: Die Komponente TIdIoHandlerStack auf die Form ziehen und dann in den Propertys bei TIdIrc als IOHandler hinzufügen. Dann wie erwähnt einfach die Zeile: "IdIRC1.IdIOHandlerStack1.DefStringEncoding := TIdTextEncoding.UTF8;" irgendwo bevor man connected hinzufügen. :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz