AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Sonderzeichen übermitteln
Thema durchsuchen
Ansicht
Themen-Optionen

Sonderzeichen übermitteln

Ein Thema von codenoob · begonnen am 28. Jun 2017 · letzter Beitrag vom 2. Jul 2017
Antwort Antwort
Seite 1 von 2  1 2      
codenoob
(Gast)

n/a Beiträge
 
#1

Sonderzeichen übermitteln

  Alt 28. Jun 2017, 01:37
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:
var
  FileName : String;

  until Socket.SendBuf(pointer(AnsiString(FileName))^,Length(AnsiString(FileName))) <> -1;
und empfangen im Client so.
Delphi-Quellcode:
var
   FileName : String;

   FileName := string(Socket.ReceiveString);
Woran kann das liegen das die Sonderzeichen nicht korrekt übermittelt werden?

Grüsse Tom
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.353 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Sonderzeichen übermitteln

  Alt 28. Jun 2017, 01:56
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
codenoob
(Gast)

n/a Beiträge
 
#3

AW: Sonderzeichen übermitteln

  Alt 28. Jun 2017, 02:41
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?

Geändert von codenoob (28. Jun 2017 um 02:44 Uhr)
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.005 Beiträge
 
Delphi 2009 Professional
 
#4

AW: Sonderzeichen übermitteln

  Alt 28. Jun 2017, 07:54
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?
Geht es darum, Unicodezeichen in einer Windows Konsole anzuzeigen?
Oder wird der String auf der Client-Seite im Delphi-Debugger nicht korrekt angezeigt?
Wie sieht der Clientseitige Code aus?
Michael Justin
  Mit Zitat antworten Zitat
codenoob
(Gast)

n/a Beiträge
 
#5

AW: Sonderzeichen übermitteln

  Alt 28. Jun 2017, 12:11
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'
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Sonderzeichen übermitteln

  Alt 28. Jun 2017, 16:37
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'
Jo, Deine Konsole kann nur Ansi/ASCII (anzeigen) und damit ist es mit den Sonderzeichen Essig.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.163 Beiträge
 
Delphi 12 Athens
 
#7

AW: Sonderzeichen übermitteln

  Alt 28. Jun 2017, 21:29
Nicht ganz, auch die Console kann Unicode, bzw. UTF-8.
SetConsoleOutputCP(CP_UTF8);
MSDN-Library durchsuchenSetConsoleOutputCP MSDN-Library durchsuchenSetConsoleCP

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.
Miniaturansicht angehängter Grafiken
win8unicode.gif  
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (28. Jun 2017 um 21:33 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.353 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Sonderzeichen übermitteln

  Alt 29. Jun 2017, 14:48
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'
Du wirfst Äpfel und Birnen durcheinander.
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.
  • Zuerst im Debugger prüfen, ob die reine Übertragung funktioniert. (Haltepunkt setzen und Inhalt der Variablen auswerten.)
  • Und dich erst danach um die Anzeige kümmern, wenn du sicher bist, dass die Übertragung klappt
Denn aktuell kann es noch an vielen Dingen liegen... Variablen mit Typ AnsiString, Fehler bei der Umwandlung und eben auch an der Anzeige in der Konsole. Was davon das Problem ist, lässt sich aus deinen bisherigen Ausführungen nicht ermitteln.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
codenoob
(Gast)

n/a Beiträge
 
#9

AW: Sonderzeichen übermitteln

  Alt 29. Jun 2017, 17:28
Also momentan schaut es so aus.

screenshoot.jpg

wie gesagt so versende ich
Delphi-Quellcode:
var
  FileName : String;

  until Socket.SendBuf(pointer(AnsiString(FileName))^,Length(AnsiString(FileName))) <> -1;
und so empfange ich
Delphi-Quellcode:
var
   FileName : String;

   FileName := string(Socket.ReceiveString);
Wie kann ich denn prüffen ob es überhaupt schon in der Konsole Richtig ankommt und vom der Server Form richtig versendet wird ?

Grüsse Tom
  Mit Zitat antworten Zitat
codenoob
(Gast)

n/a Beiträge
 
#10

AW: Sonderzeichen übermitteln

  Alt 29. Jun 2017, 17:48
Hab jetzt mal ne neue Konsole gemacht.
Delphi-Quellcode:
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.
und sogar da gibt er meinen String so aus
screenshoot_2.jpg

Geändert von codenoob (29. Jun 2017 um 17:51 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz