Delphi 7 and decode UTF-8 base64 -


in delphi 7, have widestring encoded base64(that received web service widestring result) :

pd94bwwgdmvyc2lvbj0ims4wij8+dqo8c3ryaw5nptiq2lpyqjwvc3ryaw5npg==

when decoded it, result not utf-8:

<?xml version="1.0"?> <string>طھط³طھ</string> 

but when decoded base64decode.org, result true :

<?xml version="1.0"?> <string>تست</string> 

i have use encddecd unit decodestring function.

the problem have using decodestring. function, in delphi 7, treats decoded binary data being ansi encoded. , problem text utf-8 encoded.

to continue encddecd unit have couple of options. can switch decodestream. instance, code produce utf-8 encoded text file data:

{$apptype console}  uses   classes,   encddecd;  const   data = 'pd94bwwgdmvyc2lvbj0ims4wij8+dqo8c3ryaw5nptiq2lpyqjwvc3ryaw5npg==';  var   input: tstringstream;   output: tfilestream;  begin   input := tstringstream.create(data);   try     output := tfilestream.create('c:\desktop\out.txt', fmcreate);     try       decodestream(input, output);           output.free;     end;       input.free;   end; end. 

or continue decodestring, decode utf-8 text widestring. this:

{$apptype console}  uses   classes,   encddecd;  const   data = 'pd94bwwgdmvyc2lvbj0ims4wij8+dqo8c3ryaw5nptiq2lpyqjwvc3ryaw5npg==';  var   utf8: ansistring;   wstr: widestring;  begin   utf8 := decodestring(data);   wstr := utf8decode(utf8); end. 

if content of file can represented in application's prevailing ansi locale can convert widestring plain ansistring.

var   wstr: widestring;   str: string; // alias ansistring .... wstr := ... // before str := wstr; 

however, don't think using ansi encoded text going lead fruitful programming life. encourage embrace unicode solutions.

judging content of decoded data, xml. handed xml parser. xml parsers accept utf-8 encoded data, quite can base64 decode memory stream using decodestream , hand stream off xml parser. way don't need decode utf-8 text , can let xml parser deal aspect.


Comments

Popular posts from this blog

c# - Binding a comma separated list to a List<int> in asp.net web api -

html - Is there any way to exclude a single element from the style? (Bootstrap) -