Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Keine Zuordnung für Unicode-Zeichen in der Multibyte-Zielcodeseite vorhanden (https://www.delphipraxis.net/215595-keine-zuordnung-fuer-unicode-zeichen-der-multibyte-zielcodeseite-vorhanden.html)

bcvs 2. Aug 2024 10:08

Keine Zuordnung für Unicode-Zeichen in der Multibyte-Zielcodeseite vorhanden
 
Hallo zusammen,

ich decodiere einen Base64-String, der eine XML-Datei enthält, also wieder ein String ist.
Dabei wird die Exception EEncodingError 'Keine Zuordnung für Unicode-Zeichen in der Multibyte-Zielcodeseite vorhanden' geworfen.
Delphi-Quellcode:
function Base64DecodeStringToString(Base64String:String):string;
var
  Input: TStringStream;
  Output: TStringStream;
begin
  Input := TStringStream.Create(Base64String, TEncoding.UTF8);
  Output := TStringStream.Create('', TEncoding.UTF8);
  try
    Base64DecodeStream(Input, Output);
    result:=Output.DataString; // <-- hier Exception
  finally
    Input.Free;
    Output.Free;
  end;
end;
Wenn ich die StringStreams ohne den zweiten Parameter für das Encoding create, läuft es ohne Exception durch. Dann gab es nur Probleme, dass Umlaute etc. nicht korrekt rüberkommen.

Das Base64DecodeStream ist von hier:
https://www.delphipraxis.net/193824-...dateien-2.html

Kann man da etwas machen, außer es mit einem try - except nochmal ohne Encoding zu versuchen?

Gausi 2. Aug 2024 10:28

AW: Keine Zuordnung für Unicode-Zeichen in der Multibyte-Zielcodeseite vorhanden
 
Ich würde erstmal untersuchen, ob Base64DecodeStream wirklich das Gewünschte macht. Schreib den Output mal in eine Datei (über TFileStream) und guck dir das mit nem Hexeditor an, ob da ggf. was schiefläuft.

Eine Stolperstelle könnten z.B. Zeilenumbrüche im Base64-String sein - wenn die der Decoder nicht rausfiltert, wird das Ergebnis ungültig.

bcvs 2. Aug 2024 13:25

AW: Keine Zuordnung für Unicode-Zeichen in der Multibyte-Zielcodeseite vorhanden
 
Guten Tipp!

Dabei habe ich bemerkt, dass ich vergessen hatte, dass in dem Base64 vor und hinter dem XML noch irgendwelche Zertifikate stehen, also Binärdaten. Die brauche ich nicht, also decodiere ich jetzt erst in einen MemoryStream und lese daraus nur das war ich brauche in den StringStream.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:30 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