Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Arbeitet ein ungarisches Windows anders als ein deutsches/englisches? (https://www.delphipraxis.net/192709-arbeitet-ein-ungarisches-windows-anders-als-ein-deutsches-englisches.html)

Uwe Raabe 12. Mai 2017 17:23

AW: Arbeitet ein ungarisches Windows anders als ein deutsches/englisches?
 
Zitat:

Zitat von SneakyBagels (Beitrag 1371145)
Zitat:

Konvertiert ein Byte-Array anhand der Standardgebietseinstellung des Systems in einen Unicode-String.
Und ich dachte immer Byte ist Byte weltweit. Ich benutze ganz normal wie wahrscheinlich jeder andere auch die Jedis dafür.

Du stellst aber eben keine Bytes dar sondern Buchstaben und die Zuordnung von Bytes zu Buchstaben ist nun mal nicht einheitlich. Wenn du auf Nummer sicher gehen willst, dann zeige die Bytes als Hex an oder verwende z.B. Base64 wenn es etwas kürzer werden soll.

SneakyBagels 12. Mai 2017 17:36

AW: Arbeitet ein ungarisches Windows anders als ein deutsches/englisches?
 
Wie würde das denn mit Base64 funktionieren? Mit Base64 hatte ich noch nie etwas zu tun.
Würde man hier dann die Bytes des Streams in Base64 wandeln sehe ich das richtig?

Vielleicht so?
Delphi-Quellcode:
... EncodeBase64(stream.Memory, stream.Size); // TBytesStream, gefüllt mit einer binary über loadfromfile

Uwe Raabe 12. Mai 2017 17:46

AW: Arbeitet ein ungarisches Windows anders als ein deutsches/englisches?
 
Zitat:

Zitat von SneakyBagels (Beitrag 1371154)
Wie würde das denn mit Base64 funktionieren? Mit Base64 hatte ich noch nie etwas zu tun.
Würde man hier dann die Bytes des Streams in Base64 wandeln sehe ich das richtig?

Base64 ist eine konsistente Art, eine Byte-Sequenz als lesbaren Text darzustellen - ebenso wie die Darstellung als Hex-String, nur kürzer. In der aktuellen Delphi Version 10.2 Tokyo findest du in System.NetEncoding in TNetEncoding.Base64 eine entsprechende Hilfsklasse für diesen Zweck. Ältere Delphi-Versionen haben das auch irgendwo (weiß nur gerade nicht mehr wo).

SneakyBagels 12. Mai 2017 17:51

AW: Arbeitet ein ungarisches Windows anders als ein deutsches/englisches?
 
Zitat:

Ältere Delphi-Versionen haben das auch irgendwo (weiß nur gerade nicht mehr wo).
Soap.EncdDecd?

Uwe Raabe 12. Mai 2017 17:54

AW: Arbeitet ein ungarisches Windows anders als ein deutsches/englisches?
 
Zitat:

Zitat von SneakyBagels (Beitrag 1371156)
Zitat:

Ältere Delphi-Versionen haben das auch irgendwo (weiß nur gerade nicht mehr wo).
Soap.EncdDecd?

Richtig :thumb:

SneakyBagels 12. Mai 2017 17:56

AW: Arbeitet ein ungarisches Windows anders als ein deutsches/englisches?
 
TNetEncoding nimmt als Eingansparameter einen Stream und schreibt die Ausgabe ebenfalls in einen Stream.
Soap.EncdDecd.EncodeBase64 nimmt einen Stream und gibt einen String zurück.

Wären die Resultate denn bei beiden gleich? Falls ja, verwende ich glaube ich EncodeBase64 denn dann spare ich mir eine Stream-Variable.

Uwe Raabe 12. Mai 2017 18:00

AW: Arbeitet ein ungarisches Windows anders als ein deutsches/englisches?
 
Zitat:

Zitat von SneakyBagels (Beitrag 1371158)
TNetEncoding nimmt als Eingansparameter einen Stream und schreibt die Ausgabe ebenfalls in einen Stream.
Soap.EncdDecd.EncodeBase64 nimmt einen Stream und gibt einen String zurück.

Wären die Resultate denn bei beiden gleich? Falls ja, verwende ich glaube ich EncodeBase64 denn dann spare ich mir eine Stream-Variable.

Das Ergebnis sollte in beiden Fällen gleich sein. Der Stream enthält die Base64-codierten Zeichen in ASCII/UTF-8 (es werden nur Zeichen im unteren Bereich verwendet, daher ist das hier egal).

TNetEncoding hat auch eine Funktion EncodeBytesToString, allerdings nimm die keinen Stream als Parameter.

SneakyBagels 12. Mai 2017 18:02

AW: Arbeitet ein ungarisches Windows anders als ein deutsches/englisches?
 
Zitat:

TNetEncoding hat auch eine Funktion EncodeBytesToString, allerdings nimm die keinen Stream als Parameter.
Notfalls nimmt sie dann ja stream.bytes.

Nur noch einmal zum Mitschreiben. Vorher habe ich mit StringOf (also TEncoding und Default Codepage) einen Stream in einen String geändert und dann in einen Hash.
Das ging wegen der anderen Codepage oder warum auch immer oder weil string nicht gleich string ist schief.
Den Stream mittels Base64 in Base64 zu ändern und dann diesen String den ich als Rückgabe bekomme in einen Hash das funktioniert auch bei anderen Codepages korrekt?

Uwe Raabe 12. Mai 2017 18:23

AW: Arbeitet ein ungarisches Windows anders als ein deutsches/englisches?
 
Zitat:

Zitat von SneakyBagels (Beitrag 1371162)
Vorher habe ich mit StringOf (also TEncoding und Default Codepage) einen Stream in einen String geändert und dann in einen Hash.

Wirklich? Ich dachte du hast erst aus dem Stream einen Hash ermittelt und den dann in einen String umgewandelt.

SneakyBagels 12. Mai 2017 19:00

AW: Arbeitet ein ungarisches Windows anders als ein deutsches/englisches?
 
Mir wurde gerade mitgeteilt, dass diese Änderung Abhilfe geschafft hat und nun alles funktioniert wie vorgesehen.
Ich konnte das leider nie selber testen, da ich kein Windows in der nötigen Sprache hier habe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:48 Uhr.
Seite 2 von 2     12   

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 by Thomas Breitkreuz