![]() |
Sonderzeichen übermitteln
Hi Delphianers
Ich habe folgendes Problem ich versende über mein Netzwerk vom 1.PC auf meinen anderen 2.PC Dateinamen. Dies funktioniert auch aber sobald ein Dateiname ein sonderzeichen hat wie zb. 'MeineMusikDateiૐ.mp3' dann empfängt der Client vom Server den Dateinamen so... 'MeineMusikDatei ?.mp3' Versenden Tue ich im Server so.
Delphi-Quellcode:
und empfangen im Client so.
var
FileName : String; until Socket.SendBuf(pointer(AnsiString(FileName))^,Length(AnsiString(FileName))) <> -1;
Delphi-Quellcode:
Woran kann das liegen das die Sonderzeichen nicht korrekt übermittelt werden?
var
FileName : String; FileName := string(Socket.ReceiveString); Grüsse Tom |
AW: Sonderzeichen übermitteln
Du castest auf AnsiString. Und AnsiStrings können eben keine Unicodezeichen enthalten, da dort nur ein Byte pro Zeichen zur Verfügung steht.
Als Lösung kannst du Utf8Encode zum Umwandeln des Unicodestrings in einen Ansistring / RawString zum Senden und UTF8ToString zum Zurückumwandeln verwenden. UTF-8 verwendet ggf. mehrere Bytes zum Encoding, wie auch Unicode, aber bei UTF-8 werden einfach mehrere Zeichen zum Kodieren eines einzelnen Zeichens verwendet. |
AW: Sonderzeichen übermitteln
ich habe das nun so versucht aber ich bekomme immer noch das selbe resultat.
der client bekommt nun 'MeinMusikDatei à«?.mp3' und wenn ich das dann mit UTF8ToString wieder zurückwandeln will bekomme ich wieder 'MeineMusikDatei ?.mp3' kann es was damit zu tun haben weil der Client in ner Konsole läuft? |
AW: Sonderzeichen übermitteln
Zitat:
Oder wird der String auf der Client-Seite im Delphi-Debugger nicht korrekt angezeigt? Wie sieht der Clientseitige Code aus? |
AW: Sonderzeichen übermitteln
Also meine Form mit den Serversockets versenden den den Dateinamen an meinen client der Konsole ist.
Dies funktioniert auch ausser der Dateiname besteht aus sonderzeichen da kommt beim client eben nicht 'MeineMusikDateiૐ.mp3' an sondern nur 'MeineMusikDatei ?.mp3' Nach langem Googeln scheint es wohl mit der Konsole an der Konsole zu liegen. Denn wenn ich das ganze in meiner Server Form mit Utf8Encode(Dateiname) umwandle und verschicket kommt am clent auch 'MeinMusikDatei à«?.mp3' aber dieser lässt sich danneben nicht mit UTF8ToString oder UTF8Decode wieder zurückwandeln dann hab ich wieder 'MeineMusikDatei ?.mp3' |
AW: Sonderzeichen übermitteln
Zitat:
Gruß K-H |
AW: Sonderzeichen übermitteln
Liste der Anhänge anzeigen (Anzahl: 1)
Nicht ganz, auch die Console kann Unicode, bzw. UTF-8.
Delphi-Quellcode:
SetConsoleOutputCP(CP_UTF8);
![]() ![]() Standardmäßig ist die Console oftmals mit einem OEM-Charset initialisiert. Wer sich noch an due Autoexec.bat erinnert. Auch damals konnte man einen anderen Charset Codepage einstellen (ANSI) und sogar ein paar der 255 Chars nach Belieben pixelweise neu definieren. |
AW: Sonderzeichen übermitteln
Zitat:
Das eine ist die reine Übertragung und die Umwandlung dafür. Das andere ist die Anzeige in der Konsole. So etwas solltest du schrittweise angehen.
|
AW: Sonderzeichen übermitteln
Liste der Anhänge anzeigen (Anzahl: 1)
Also momentan schaut es so aus.
Anhang 47596 wie gesagt so versende ich
Delphi-Quellcode:
und so empfange ich
var
FileName : String; until Socket.SendBuf(pointer(AnsiString(FileName))^,Length(AnsiString(FileName))) <> -1;
Delphi-Quellcode:
Wie kann ich denn prüffen ob es überhaupt schon in der Konsole Richtig ankommt und vom der Server Form richtig versendet wird ?
var
FileName : String; FileName := string(Socket.ReceiveString); Grüsse Tom |
AW: Sonderzeichen übermitteln
Liste der Anhänge anzeigen (Anzahl: 1)
Hab jetzt mal ne neue Konsole gemacht.
Delphi-Quellcode:
und sogar da gibt er meinen String so aus
program Project1;
{$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils; var MyString : String; begin try MyString := 'Mein String mit Sonderzeichen ૐ'; writeln(MyString); Readln; { TODO -oUser -cConsole Main : Code hier einfügen } except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end. Anhang 47598 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:38 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