Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Decode Base64 into Memo or file
#1
Hi,

I try to decode a string encoded in base64 into Memo o alternatively in a text file...

try this but not work...

Code:
var
   b : TBytes;
   testo : string;

begin
   ...
   b := TNetEncoding.Base64.DecodeStringToBytes(mystringencodedbase64);
   testo := TEncoding.ANSI.GetString(b);
   memo1.text := testo;

in memo is show symbol not my original string ....

thanks
Alessandro Romano
Reply
#2
Hi Alessandro. Try use Indy to do this for you. The second parameter define your encoding type. Indy uses its default encoding (ASCII).
Code:
memo1.text := TIdDecoderMIME.DecodeString( mystringencodedbase64.Text, IndyTextEncoding_UTF8 );
Reply
#3
Hi Jose,
thanks for your suggestion... but not work Sad

if I try.... in the memo1 I see only special character...

I try to decode my string on line here https://www.base64decode.org/ and work... !

this is my string for test coded base64:

MIJAZgYJKoZIhvcNAQcCoIJAVzCCQFMCAQExDzANBglghkgBZQMEAgEFADCCL6YGCSqGSIb3DQEHAaCCL5cEgi+TPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHA6RmF0dHVyYUVsZXR0cm9uaWNhIHhtbG5zOm5zMTI9Imh0dHA6Ly90ZWxlY29taXRhbGlhLml0L3MyZC9zb2EvZXNiX2V0bC9sb2dnZXIiIHhtbG5zOnA9Imh0dHA6Ly9pdmFzZXJ2aXppLmFnZW56aWFlbnRyYXRlLmdvdi5pdC9kb2NzL3hzZC9mYXR0dXJlL3YxLjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOmRzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIiB2ZXJzaW9uZT0iRlBSMTIiPgogICAgPEZhdHR1cmFFbGV0dHJvbmljYUhlYWRlcj4KICAgICAgICA8RGF0aVRyYXNtaXNzaW9uZT4KICAgICAgICAgICAgPElkVHJhc21pdHRlbnRlPgogICAgICAgICAgICAgICAgPElkUGFlc2U+SVQ8L0lkUGFlc2U+CiAgICAgICAgICAgICAgICA8SWRDb2RpY2U+MDA0ODg0MTAwMTA8L0lkQ29kaWNlPgogICAgICAgICAgICA8L0lkVHJhc21pdHRlbnRlPgogICAgICAgICAgICA8UHJvZ3Jlc3Npdm9JbnZpbz40U1czbjwvUHJvZ3Jlc3Npdm9JbnZpbz4KICAgICAgICAgICAgPEZvcm1hdG9UcmFzbWlzc2lvbmU+RlBSMTI8L0Zvcm1hdG9UcmFzbWlzc2lvbmU+CiAgICAgICAgICAgIDxDb2RpY2VEZXN0aW5hdGFyaW8+MDAwMDAwMDwvQ29kaWNlRGVzdGluYXRhcmlvPgogICAgICAgIDwvRGF0aVRyYXNtaXNzaW9uZT4KICAgICAgICA8Q2VkZW50ZVByZXN0YXRvcmU+CiAgICAgICAgICAgIDxEYXRpQW5hZ3JhZmljaT4KICAgICAgICAgICAgICAgIDxJZEZpc2NhbGVJVkE+CiAgICAgICAgICAgICAgICAgICAgPElkUGFlc2U+SVQ8L0lkUGFlc2U+CiAgICAgICAgICAgICAgICAgICAgPElkQ29kaWNlPjAwNDg4NDEwMDEwPC9JZENvZGljZT4KICAgICAgICAgICAgICAgIDwvSWRGaXNjYWxlSVZBPgogICAgICAgICAgICAgICAgPENvZGljZUZpc2NhbGU+MDA0ODg0MTAwMTA8L0NvZGljZUZpc2NhbGU+CiAgICAgICAgICAgICAgICA8QW5hZ3JhZmljYT4KICAgICAgICAgICAgICAgICAgICA8RGVub21pbmF6aW9uZT5USU0gIFMucC5BLjwvRGVub21pbmF6aW9uZT4KICAgICAgICAgICAgICAgIDwvQW5hZ3JhZmljYT4KICAgICAgICAgICAgICAgIDxSZWdpbWVGaXNjYWxlPlJGMDE8L1JlZ2ltZUZpc2NhbGU+CiAgICAgICAgICAgIDwvRGF0aUFuYWdyYWZpY2k+CiAgICAgICAgICAgIDxTZWRlPgogICAgICAgICAgICAgICAgPEluZGlyaXp6bz5WaWEgR2FldGFubyBOZWdyaTwvSW5kaXJpenpvPgogICAgICAgICAgICAgICAgPE51bWVyb0Npdmljbz4xPC9OdW1lcm9DaXZpY28+CiAgICAgICAgICAgICAgICA8Q0FQPjIwMTIzPC9DQVA+CiAgICAgICAgICAgICAgICA8Q29tdW5lPk1JTEFOTzwvQ29tdW5lPgogICAgICAgICAgICAgICAgPFByb3ZpbmNpYT5NSTwvUHJvdmluY2lhPgogICAgICAgICAgICAgICAgPE5hemlvbmU+SVQ8L05hemlvbmU+CiAgICAgICAgICAgIDwvU2VkZT4KICAgICAgICAgICAgPElzY3JpemlvbmVSRUE+CiAgICAgICAgICAgICAgICA8VWZmaWNpbz5NSTwvVWZmaWNpbz4KICAgICAgICAgICAgICAgIDxOdW1lcm9SRUE+MTU4MDY5NTwvTnVtZXJvUkVBPgogICAgICAgICAgICAgICAgPENhcGl0YWxlU29jaWFsZT4xMTY3NzAwMjg1NS4xMDwvQ2FwaXRhbGVTb2NpYWxlPgogICAgICAgICAgICAgICAgPFNvY2lvVW5pY28+U008L1NvY2lvVW5pY28+CiAgICAgICAgICAgICAgICA8U3RhdG9MaXF1aWRhemlvbmU+TE48L1N0YXRvTGlxdWlkYXppb25lPgogICAgICAgICAgICA8L0lzY3JpemlvbmVSRUE+CiAgICAgICAgPC9DZWRlbnRlUHJlc3RhdG9yZT4KICAgICAgICA8Q2Vzc2lvbmFyaW9Db21taXR0ZW50ZT4KICAgICAgICAgICAgPERhdGlBbmFncmFmaWNpPgogICAgICAgICAgICAgICAgPElkRmlzY2FsZUlWQT4KICAgICAgICAgICAgICAgICAgICA8SWRQYWVzZT5JVDwvSWRQYWVzZT4KICAgICAgICAgICAgICAgICAgICA8SWRDb2RpY2U+MDU1MDQyMzA4NzA8L0lkQ29kaWNlPgogICAgICAgICAgICAgICAgPC9JZEZpc2NhbGVJVkE+CiAgICAgICAgICAgICAgICA8Q29kaWNlRmlzY2FsZT5STU5MU042OU0xNEMzNTFNPC9Db2RpY2VGaXNjYWxlPgogICAgICAgICAgICAgICAgPEFuYWdyYWZpY2E+CiAgICAgICAgICAgICAgICAgICAgPERlbm9taW5hemlvbmU+RVJHT1NPRlQgREkgUk9NQU5PIEFMRVNTQU5EUk88L0Rlbm9taW5hemlvbmU+CiAgICAgICAgICAgICAgICA8L0FuYWdyYWZpY2E+CiAgICAgICAgICAgIDwvRGF0aUFuYWdyYWZpY2k+CiAgICAgICAgICAgIDxTZWRlPgogICAgICAgICAgICAgICAgPEluZGlyaXp6bz5WLlRPU0NBTklOSSAxMTwvSW5kaXJpenpvPgogICAgICAgICAgICAgICAgPENBUD45NTAzMzwvQ0FQPgogICAgICAgICAgICAgICAgPENvbXVuZT5CSUFOQ0FWSUxMQTwvQ29tdW5lPgogICAgICAgICAgICAgICAgPFByb3ZpbmNpYT5DVDwvUHJvdmluY2lhPgogICAgICAgICAgICAgICAgPE5hemlvbmU+SVQ8L05hemlvbmU+CiAgICAgICAgICAgIDwvU2VkZT4KICAgICAgICA8L0Nlc3Npb25hcmlvQ29tbWl0dGVudGU+CiAgICA8L0ZhdHR1cmFFbGV0dHJvbmljYUhlYWRlcj4KICAgIDxGYXR0dXJhRWxldHRyb25pY2FCb2R5PgogICAgICAgIDxEYXRpR2VuZXJhbGk+CiAgICAgICAgICAgIDxEYXRpR2VuZXJhbGlEb2N1bWVudG8+CiAgICAgICAgICAgICAgICA8VGlwb0RvY3VtZW50bz5URDAxPC9UaXBvRG9jdW1lbnRvPgogICAgICAgICAgICAgICAgPERpdmlzYT5FVVI8L0RpdmlzYT4KICAgICAgICAgICAgICAgIDxEYXRhPjIwMTktMDQtMDU8L0RhdGE+CiAgICAgICAgICAgICAgICA8TnVtZXJvPjhWMDAxNDY3MDY8L051bWVybz4KICAgICAgICAgICAgICAgIDxJbXBvcnRvVG90YWxlRG9jdW1lbnRvPjE0OS45OTwvSW1wb3J0b1RvdGFsZURvY3VtZW50bz4KICAgICAgICAgICAgICAgIDxDYXVzYWxlPjNCSU0gMjAxOTwvQ2F1c2FsZT4KICAgICAgICAgICAgPC9EYXRpR2VuZXJhbGlEb2N1bWVudG8+CiAgICAgICAgICAgIDxEYXRpQ29udHJhdHRvPgogICAgICAgICAgICAgICAgPElkRG9jdW1lbnRvPjA5NTk4Mzk1ODwvSWREb2N1bWVudG8+CiAgICAgICAgICAgICAgICA8Q29kaWNlQ29tbWVzc2FDb252ZW56aW9uZT5VVFRUMTwvQ29kaWNlQ29tbWVzc2FDb252ZW56aW9uZT4KICAgICAgICAgICAgPC9EYXRpQ29udHJhdHRvPgogICAgICAgIDwvRGF0aUdlbmVyYWxpPgogICAgICAgIDxEYXRpQmVuaVNlcnZpemk+CiAgICAgICAgICAgIDxEZXR0YWdsaW9MaW5lZT4KICAgICAgICAgICAgICAgIDxOdW1lcm9MaW5lYT4xPC9OdW1lcm9MaW5lYT4KICAgICAgICAgICAgICAgIDxEZXNjcml6aW9uZT5GdW56aW9uYWxpdMOgIFNhZmUgV2ViKiAwMSBtYXJ6byAxOSAtIDMxIG1hcnpvIDE5PC9EZXNjcml6aW9uZT4KICAgICAgICAgICAgICAgIDxEYXRhSW5pemlvUGVyaW9kbz4yMDE5LTAzLTAxPC9EYXRhSW5pemlvUGVyaW9kbz4KICAgICAgICAgICAgICAgIDxEYXRhRmluZVBlcmlvZG8+MjAxOS0wMy0zMTwvRGF0YUZpbmVQZXJpb2RvPgogICAgICAgICAgICAgICAgPFByZXp6b1VuaXRhcmlvPjAuMDA8L1ByZXp6b1VuaXRhcmlvPgogICAgICAgICAgICAgICAgPFByZXp6b1RvdGFsZT4wLjAwPC9QcmV6em9Ub3RhbGU+CiAgICAgICAgICAgICAgICA8QWxpcXVvdGFJVkE+MjIuMDA8L0FsaXF1b3RhSVZBPgogICAgICAgICAgICAgICAgPEFsdHJpRGF0aUdlc3Rpb25hbGk+CiAgICAgICAgICAgICAgICAgICAgPFRpcG9EYXRvPlVUVFQxPC9UaXBvRGF0bz4KICAgICAgICAgICAgICAgICAgICA8UmlmZXJpbWVudG9UZXN0bz4wOTU5ODM5NTg8L1JpZmVyaW1lbnRvVGVzdG8+CiAgICAgICAgICAgICAgICA8L0FsdHJpRGF0aUdlc3Rpb25hbGk+CiAgICAgICAgICAgIDwvRGV0dGFnbGlvTGluZWU+CiAgICAgICAgICAgIDxEZXR0YWdsaW9MaW5lZT4KICAgICAgICAgICAgICAgIDxOdW1lcm9MaW5lYT4yPC9OdW1lcm9MaW5lYT4KICAgICAgICAgICAgICAgIDxEZXNjcml6aW9uZT5PcHppb25lIE51bWVyYXppb25lIEFnZ2l1bnRpdmEgZmViYnJhaW8gLSBtYXJ6bzwvRGVzY3JpemlvbmU+CiAgICAgICAgICAgICAgICA8RGF0YUluaXppb1BlcmlvZG8+MjAxOS0wMi0wMTwvRGF0YUluaXppb1BlcmlvZG8+CiAgICAgICAgICAgICAgICA8RGF0YUZpbmVQZXJpb2RvPjIwMTktMDMtMzE8L0RhdGFGaW5lUGVyaW9kbz4KICAgICAgICAgICAgICAgIDxQcmV6em9Vbml0YXJpbz4xMC4wMDwvUHJlenpvVW5pdGFyaW8+CiAgICAgICAgICAgICAgICA8UHJlenpvVG90YWxlPjEwLjAwPC9QcmV6em9Ub3RhbGU+CiAgICAgICAgICAgICAgICA8QWxpcXVvdGFJVkE+MjIuMDA8L0FsaXF1b3RhSVZBPgogICAgICAgICAgICAgICAgPEFsdHJpRGF0aUdlc3Rpb25hbGk+CiAgICAgICAgICAgICAgICAgICAgPFRpcG9EYXRvPlVUVFQxPC9UaXBvRGF0bz4KICAgICAgICAgICAgICAgICAgICA8UmlmZXJpbWVudG9UZXN0bz4wOTU5ODM5NTg8L1JpZmVyaW1lbnRvVGVzdG8+CiAgICAgICAgICAgICAgICA8L0FsdHJpRGF0aUdlc3Rpb25hbGk+CiAgICAgICAgICAgIDwvRGV0dGFnbGlvTGluZWU+CiAgICAgICAgICAgIDxEZXR0YWdsaW9MaW5lZT4KICAgICAgICAgICAgICAgIDxOdW1lcm9MaW5lYT4zPC9OdW1lcm9MaW5lYT4KICAgICAgICAgICAgICAgIDxEZXNjcml6aW9uZT5PcHppb25lIE51bWVyYXppb25lIEFnZ2l1bnRpdmEgZmViYnJhaW8gLSBtYXJ6bzwvRGVzY3JpemlvbmU+CiAgICAgICAgICAgICAgICA8RGF0YUluaXppb1BlcmlvZG8+MjAxOS0wMi0wMTwvRGF0YUluaXppb1BlcmlvZG8+CiAgICAgICAgICAgICAgICA8RGF0YUZpbmVQZXJpb2RvPjIwMTktMDMtMzE8L0RhdGFGaW5lUGVyaW9kbz4KICAgICAgICAgICAgICAgIDxQcmV6em9Vbml0YXJpbz4xMC4wMDwvUHJlenpvVW5pdGFyaW8+CiAgICAgICAgICAgICAgICA8UHJlenpvVG90YWxlPjEwLjAwPC9QcmV6em9Ub3RhbGU+CiAgICAgICAgICAgICAgICA8QWxpcXVvdGFJVkE+MjIuMDA8L0FsaXF1b3RhSVZBPgogICAgICAgICAgICAgICAgPEFsdHJpRGF0aUdlc3Rpb25hbGk+CiAgICAgICAgICAgICAgICAgICAgPFRpcG9EYXRvPlVUVFQxPC9UaXBvRGF0bz4KICAgICAgICAgICAgICAgICAgICA8UmlmZXJpbWVudG9UZXN0bz4wOTU5ODM5NTg8L1JpZmVyaW1lbnRvVGVzdG8+CiAgICAgICAgICAgICAgICA8L0FsdHJpRGF0aUdlc3Rpb25hbGk+CiAgICAgICAgICAgIDwvRGV0dGFnbGlvTGluZWU+CiAgICAgICAgICAgIDxEZXR0YWdsaW9MaW5lZT4KICAgICAgICAgICAgICAgIDxOdW1lcm9MaW5lYT40PC9OdW1lcm9MaW5lYT4KICAgICAgICAgICAgICAgIDxEZXNjcml6aW9uZT5TdXBlcmZpYnJhIGZlYmJyYWlvIC0gbWFyem88L0Rlc2NyaXppb25lPgogICAgICAgICAgICAgICAgPERhdGFJbml6aW9QZXJpb2RvPjIwMTktMDItMDE8L0RhdGFJbml6aW9QZXJpb2RvPgogICAgICAgICAgICAgICAgPERhdGFGaW5lUGVyaW9kbz4yMDE5LTAzLTMxPC9EYXRhRmluZVBlcmlvZG8+CiAgICAgICAgICAgICAgICA8UHJlenpvVW5pdGFyaW8+MTAuMDA8L1ByZXp6b1VuaXRhcmlvPgogICAgICAgICAgICAgICAgPFByZXp6b1RvdGFsZT4xMC4wMDwvUHJlenpvVG90YWxlPgogICAgICAgICAgICAgICAgPEFsaXF1b3RhSVZBPjIyLjAwPC9BbGlxdW90YUlWQT4KICAgICAgICAgICAgICAgIDxBbHRyaURhdGlHZXN0aW9uYWxpPgogICAgICAgICAgICAgICAgICAgIDxUaXBvRGF0bz5VVFRUMTwvVGlwb0RhdG8+CiAgICAgICAgICAgICAgICAgICAgPFJpZmVyaW1lbnRvVGVzdG8+MDk1OTgzOTU4PC9SaWZlcmltZW50b1Rlc3RvPgogICAgICAgICAgICAgICAgPC9BbHRyaURhdGlHZXN0aW9uYWxpPgogICAgICAgICAgICA8L0RldHRhZ2xpb0xpbmVlPgogICAgICAgICAgICA8RGV0dGFnbGlvTGluZWU+CiAgICAgICAgICAgICAgICA8TnVtZXJvTGluZWE+NTwvTnVtZXJvTGluZWE+CiAgICAgICAgICAgICAgICA8RGVzY3JpemlvbmU+VHV0dG9maWJyYSBmZWJicmFpbyAtIG1hcnpvPC9EZXNjcml6aW9uZT4KICAgICAgICAgICAgICAgIDxEYXRhSW5pemlvUGVyaW9kbz4yMDE5LTAyLTAxPC9EYXRhSW5pemlvUGVyaW9kbz4KICAgICAgICAgICAgICAgIDxEYXRhRmluZVBlcmlvZG8+MjAxOS0wMy0zMTwvRGF0YUZpbmVQZXJpb2RvPgogICAgICAgICAgICAgICAgPFByZXp6b1VuaXRhcmlvPjEyMi4wMDwvUHJlenpvVW5pdGFyaW8+CiAgICAgICAgICAgICAgICA8UHJlenpvVG90YWxlPjEyMi4wMDwvUHJlenpvVG90YWxlPgogICAgICAgICAgICAgICAgPEFsaXF1b3RhSVZBPjIyLjAwPC9BbGlxdW90YUlWQT4KICAgICAgICAgICAgICAgIDxBbHRyaURhdGlHZXN0aW9uYWxpPgogICAgICAgICAgICAgICAgICAgIDxUaXBvRGF0bz5VVFRUMTwvVGlwb0RhdG8+CiAgICAgICAgICAgICAgICAgICAgPFJpZmVyaW1lbnRvVGVzdG8+MDk1OTgzOTU4PC9SaWZlcmltZW50b1Rlc3RvPgogICAgICAgICAgICAgICAgPC9BbHRyaURhdGlHZXN0aW9uYWxpPgogICAgICAgICAgICA8L0RldHRhZ2xpb0xpbmVlPgogICAgICAgICAgICA8RGV0dGFnbGlvTGluZWU+CiAgICAgICAgICAgICAgICA8TnVtZXJvTGluZWE+NjwvTnVtZXJvTGluZWE+CiAgICAgICAgICAgICAgICA8RGVzY3JpemlvbmU+Qm9udXMgSW50ZXJuZXQ8L0Rlc2NyaXppb25lPgogICAgICAgICAgICAgICAgPFByZXp6b1VuaXRhcmlvPi0yMC4wMDwvUHJlenpvVW5pdGFyaW8+CiAgICAgICAgICAgICAgICA8UHJlenpvVG90YWxlPi0yMC4wMDwvUHJlenpvVG90YWxlPgogICAgICAgICAgICAgICAgPEFsaXF1b3RhSVZBPjIyLjAwPC9BbGlxdW90YUlWQT4KICAgICAgICAgICAgICAgIDxBbHRyaURhdGlHZXN0aW9uYWxpPgogICAgICAgICAgICAgICAgICAgIDxUaXBvRGF0bz5VVFRUMTwvVGlwb0RhdG8+CiAgICAgICAgICAgICAgICAgICAgPFJpZmVyaW1lbnRvVGVzdG8+MDk1OTgzOTU4PC9SaWZlcmltZW50b1Rlc3RvPgogICAgICAgICAgICAgICAgPC9BbHRyaURhdGlHZXN0aW9uYWxpPgogICAgICAgICAgICA8L0RldHRhZ2xpb0xpbmVlPgogICAgICAgICAgICA8RGV0dGFnbGlvTGluZWU+CiAgICAgICAgICAgICAgICA8TnVtZXJvTGluZWE+NzwvTnVtZXJvTGluZWE+CiAgICAgICAgICAgICAgICA8RGVzY3JpemlvbmU+UHJvbW8gTnVtZXJhemlvbmUgYWdnaXVudGl2YTwvRGVzY3JpemlvbmU+CiAgICAgICAgICAgICAgICA8RGF0YUluaXppb1BlcmlvZG8+MjAxOS0wMi0wMTwvRGF0YUluaXppb1BlcmlvZG8+CiAgICAgICAgICAgICAgICA8RGF0YUZpbmVQZXJpb2RvPjIwMTktMDMtMzE8L0RhdGFGaW5lUGVyaW9kbz4KICAgICAgICAgICAgICAgIDxQcmV6em9Vbml0YXJpbz4tMjAuMDA8L1ByZXp6b1VuaXRhcmlvPgogICAgICAgICAgICAgICAgPFByZXp6b1RvdGFsZT4tMjAuMDA8L1ByZXp6b1RvdGFsZT4KICAgICAgICAgICAgICAgIDxBbGlxdW90YUlWQT4yMi4wMDwvQWxpcXVvdGFJVkE+CiAgICAgICAgICAgICAgICA8QWx0cmlEYXRpR2VzdGlvbmFsaT4KICAgICAgICAgICAgICAgICAgICA8VGlwb0RhdG8+VVRUVDE8L1RpcG9EYXRvPgogICAgICAgICAgICAgICAgICAgIDxSaWZlcmltZW50b1Rlc3RvPjA5NTk4Mzk1ODwvUmlmZXJpbWVudG9UZXN0bz4KICAgICAgICAgICAgICAgIDwvQWx0cmlEYXRpR2VzdGlvbmFsaT4KICAgICAgICAgICAgPC9EZXR0YWdsaW9MaW5lZT4KICAgICAgICAgICAgPERldHRhZ2xpb0xpbmVlPgogICAgICAgICAgICAgICAgPE51bWVyb0xpbmVhPjg8L051bWVyb0xpbmVhPgogICAgICAgICAgICAgICAgPERlc2NyaXppb25lPlByb21vIFN1cGVyZmlicmE8L0Rlc2NyaXppb25lPgogICAgICAgICAgICAgICAgPERhdGFJbml6aW9QZXJpb2RvPjIwMTktMDItMDE8L0RhdGFJbml6aW9QZXJpb2RvPgogICAgICAgICAgICAgICAgPERhdGFGaW5lUGVyaW9kbz4yMDE5LTAzLTMxPC9EYXRhRmluZVBlcmlvZG8+CiAgICAgICAgICAgICAgICA8UHJlenpvVW5pdGFyaW8+LTEwLjAwPC9QcmV6em9Vbml0YXJpbz4KICAgICAgICAgICAgICAgIDxQcmV6em9Ub3RhbGU+LTEwLjAwPC9QcmV6em9Ub3RhbGU+CiAgICAgICAgICAgICAgICA8QWxpcXVvdGFJVkE+MjIuMDA8L0FsaXF1b3RhSVZBPgogICAgICAgICAgICAgICAgPEFsdHJpRGF0aUdlc3Rpb25hbGk+CiAgICAgICAgICAgICAgICAgICAgPFRpcG9EYXRvPlVUVFQxPC9UaXBvRGF0bz4KICAgICAgICAgICAgICAgICAgICA8UmlmZXJpbWVudG9UZXN0bz4wOTU5ODM5NTg8L1JpZmVyaW1lbnRvVGVzdG8+CiAgICAgICAgICAgICAgICA8L0FsdHJpRGF0aUdlc3Rpb25hbGk+CiAgICAgICAgICAgIDwvRGV0dGFnbGlvTGluZWU+CiAgICAgICAgICAgIDxEZXR0YWdsaW9MaW5lZT4KICAgICAgICAgICAgICAgIDxOdW1lcm9MaW5lYT45PC9OdW1lcm9MaW5lYT4KICAgICAgICAgICAgICAgIDxEZXNjcml6aW9uZT5WZW5kaXRhIFJvdXRlciBXaS1GaTwvRGVzY3JpemlvbmU+CiAgICAgICAgICAgICAgICA8RGF0YUluaXppb1BlcmlvZG8+MjAxOS0wMy0xNDwvRGF0YUluaXppb1BlcmlvZG8+CiAgICAgICAgICAgICAgICA8RGF0YUZpbmVQZXJpb2RvPjIwMTktMDMtMTQ8L0RhdGFGaW5lUGVyaW9kbz4KICAgICAgICAgICAgICAgIDxQcmV6em9Vbml0YXJpbz4xMi4yMDwvUHJlenpvVW5pdGFyaW8+CiAgICAgICAgICAgICAgICA8UHJlenpvVG90YWxlPjEyLjIwPC9QcmV6em9Ub3RhbGU+CiAgICAgICAgICAgICAgICA8QWxpcXVvdGFJVkE+MC4wMDwvQWxpcXVvdGFJVkE+CiAgICAgICAgICAgICAgICA8TmF0dXJhPk4yPC9OYXR1cmE+CiAgICAgICAgICAgICAgICA8QWx0cmlEYXRpR2VzdGlvbmFsaT4KICAgICAgICAgICAgICAgICAgICA8VGlwb0RhdG8+VVRUVDE8L1RpcG9EYXRvPgogICAgICAgICAgICAgICAgICAgIDxSaWZlcmltZW50b1Rlc3RvPjA5NTk4Mzk1ODwvUmlmZXJpbWVudG9UZXN0bz4KICAgICAgICAgICAgICAgIDwvQWx0cmlEYXRpR2VzdGlvbmFsaT4KICAgICAgICAgICAgPC9EZXR0YWdsaW9MaW5lZT4KICAgICAgICAgICAgPERldHRhZ2xpb0xpbmVlPgogICAgICAgICAgICAgICAgPE51bWVyb0xpbmVhPjEwPC9OdW1lcm9MaW5lYT4KICAgICAgICAgICAgICAgIDxEZXNjcml6aW9uZT5Db25zZWduYSBlbGVuY2hpIHRlbGVmb25pY2k8L0Rlc2NyaXppb25lPgogICAgICAgICAgICAgICAgPERhdGFJbml6aW9QZXJpb2RvPjIwMTgtMTAtMjE8L0RhdGFJbml6aW9QZXJpb2RvPgogICAgICAgICAgICAgICAgPERhdGFGaW5lUGVyaW9kbz4yMDE4LTEwLTIxPC9EYXRhRmluZVBlcmlvZG8+CiAgICAgICAgICAgICAgICA8UHJlenpvVW5pdGFyaW8+NS4wMDwvUHJlenpvVW5pdGFyaW8+CiAgICAgICAgICAgICAgICA8UHJlenpvVG90YWxlPjUuMDA8L1ByZXp6b1RvdGFsZT4KICAgICAgICAgICAgICAgIDxBbGlxdW90YUlWQT4yMi4wMDwvQWxpcXVvdGFJVkE+CiAgICAgICAgICAgICAgICA8QWx0cmlEYXRpR2VzdGlvbmFsaT4KICAgICAgICAgICAgICAgICAgICA8VGlwb0RhdG8+VVRUVDE8L1RpcG9EYXRvPgogICAgICAgICAgICAgICAgICAgIDxSaWZlcmltZW50b1Rlc3RvPjA5NTk4Mzk1ODwvUmlmZXJpbWVudG9UZXN0bz4KICAgICAgICAgICAgICAgIDwvQWx0cmlEYXRpR2VzdGlvbmFsaT4KICAgICAgICAgICAgPC9EZXR0YWdsaW9MaW5lZT4KICAgICAgICAgICAgPERldHRhZ2xpb0xpbmVlPgogICAgICAgICAgICAgICAgPE51bWVyb0xpbmVhPjExPC9OdW1lcm9MaW5lYT4KICAgICAgICAgICAgICAgIDxEZXNjcml6aW9uZT5JbmRlbm5pdGEnIHJpdGFyZGF0byBwYWdhbWVudG8gMiUgQ29udG8gMS8xOTwvRGVzY3JpemlvbmU+CiAgICAgICAgICAgICAgICA8UHJlenpvVW5pdGFyaW8+Mi40OTwvUHJlenpvVW5pdGFyaW8+CiAgICAgICAgICAgICAgICA8UHJlenpvVG90YWxlPjIuNDk8L1ByZXp6b1RvdGFsZT4KICAgICAgICAgICAgICAgIDxBbGlxdW90YUlWQT4wLjAwPC9BbGlxdW90YUlWQT4KICAgICAgICAgICAgICAgIDxOYXR1cmE+TjI8L05hdHVyYT4KICAgICAgICAgICAgICAgIDxBbHRyaURhdGlHZXN0aW9uYWxpPgogICAgICAgICAgICAgICAgICAgIDxUaXBvRGF0bz5VVFRUMTwvVGlwb0RhdG8+CiAgICAgICAgICAgICAgICAgICAgPFJpZmVyaW1lbnRvVGVzdG8+MDk1OTgzOTU4PC9SaWZlcmltZW50b1Rlc3RvPgogICAgICAgICAgICAgICAgPC9BbHRyaURhdGlHZXN0aW9uYWxpPgogICAgICAgICAgICA8L0RldHRhZ2xpb0xpbmVlPgogICAgICAgICAgICA8RGV0dGFnbGlvTGluZWU+CiAgICAgICAgICAgICAgICA8TnVtZXJvTGluZWE+MTI8L051bWVyb0xpbmVhPgogICAgICAgICAgICAgICAgPERlc2NyaXppb25lPlNlcnZpemlvIGRpIHByb2R1emlvbmUgZSBpbnZpbyBmYXR0dXJhPC9EZXNjcml6aW9uZT4KICAgICAgICAgICAgICAgIDxEYXRhSW5pemlvUGVyaW9kbz4yMDE5LTAyLTAxPC9EYXRhSW5pemlvUGVyaW9kbz4KICAgICAgICAgICAgICAgIDxEYXRhRmluZVBlcmlvZG8+MjAxOS0wMy0zMTwvRGF0YUZpbmVQZXJpb2RvPgogICAgICAgICAgICAgICAgPFByZXp6b1VuaXRhcmlvPjMuOTA8L1ByZXp6b1VuaXRhcmlvPgogICAgICAgICAgICAgICAgPFByZXp6b1RvdGFsZT4zLjkwPC9QcmV6em9Ub3RhbGU+CiAgICAgICAgICAgICAgICA8QWxpcXVvdGFJVkE+MjIuMDA8L0FsaXF1b3RhSVZBPgogICAgICAgICAgICAgICAgPEFsdHJpRGF0aUdlc3Rpb25hbGk+CiAgICAgICAgICAgICAgICAgICAgPFRpcG9EYXRvPlVUVFQxPC9UaXBvRGF0bz4KICAgICAgICAgICAgICAgICAgICA8UmlmZXJpbWVudG9UZXN0bz4wOTU5ODM5NTg8L1JpZmVyaW1lbnRvVGVzdG8+CiAgICAgICAgICAgICAgICA8L0FsdHJpRGF0aUdlc3Rpb25hbGk+CiAgICAgICAgICAgIDwvRGV0dGFnbGlvTGluZWU+CiAgICAgICAgICAgIDxEYXRpUmllcGlsb2dvPgogICAgICAgICAgICAgICAgPEFsaXF1b3RhSVZBPjIyLjAwPC9BbGlxdW90YUlWQT4KICAgICAgICAgICAgICAgIDxJbXBvbmliaWxlSW1wb3J0bz4xNjAuOTA8L0ltcG9uaWJpbGVJbXBvcnRvPgogICAgICAgICAgICAgICAgPEltcG9zdGE+MzUuNDA8L0ltcG9zdGE+CiAgICAgICAgICAgIDwvRGF0aVJpZXBpbG9nbz4KICAgICAgICAgICAgPERhdGlSaWVwaWxvZ28+CiAgICAgICAgICAgICAgICA8QWxpcXVvdGFJVkE+MjIuMDA8L0FsaXF1b3RhSVZBPgogICAgICAgICAgICAgICAgPEltcG9uaWJpbGVJbXBvcnRvPi01MC4wMDwvSW1wb25pYmlsZUltcG9ydG8+CiAgICAgICAgICAgICAgICA8SW1wb3N0YT4tMTEuMDA8L0ltcG9zdGE+CiAgICAgICAgICAgIDwvRGF0aVJpZXBpbG9nbz4KICAgICAgICAgICAgPERhdGlSaWVwaWxvZ28+CiAgICAgICAgICAgICAgICA8QWxpcXVvdGFJVkE+MC4wMDwvQWxpcXVvdGFJVkE+CiAgICAgICAgICAgICAgICA8TmF0dXJhPk4yPC9OYXR1cmE+CiAgICAgICAgICAgICAgICA8SW1wb25pYmlsZUltcG9ydG8+MTQuNjk8L0ltcG9uaWJpbGVJbXBvcnRvPgogICAgICAgICAgICAgICAgPEltcG9zdGE+MC4wMDwvSW1wb3N0YT4KICAgICAgICAgICAgICAgIDxSaWZlcmltZW50b05vcm1hdGl2bz5GLkMuSVZBPC9SaWZlcmltZW50b05vcm1hdGl2bz4KICAgICAgICAgICAgPC9EYXRpUmllcGlsb2dvPgogICAgICAgIDwvRGF0aUJlbmlTZXJ2aXppPgogICAgICAgIDxEYXRpUGFnYW1lbnRvPgogICAgICAgICAgICA8Q29uZGl6aW9uaVBhZ2FtZW50bz5UUDAyPC9Db25kaXppb25pUGFnYW1lbnRvPgogICAgICAgICAgICA8RGV0dGFnbGlvUGFnYW1lbnRvPgogICAgICAgICAgICAgICAgPE1vZGFsaXRhUGFnYW1lbnRvPk1QMTg8L01vZGFsaXRhUGFnYW1lbnRvPgogICAgICAgICAgICAgICAgPERhdGFTY2FkZW56YVBhZ2FtZW50bz4yMDE5LTA1LTEwPC9EYXRhU2NhZGVuemFQYWdhbWVudG8+CiAgICAgICAgICAgICAgICA8SW1wb3J0b1BhZ2FtZW50bz4xNDkuOTk8L0ltcG9ydG9QYWdhbWVudG8+CiAgICAgICAgICAgICAgICA8Q29kaWNlUGFnYW1lbnRvPjg5MTUzMTkwMDk1MDA5ODM5NTgwMDAwMTQ5OTkxMDwvQ29kaWNlUGFnYW1lbnRvPgogICAgICAgICAgICA8L0RldHRhZ2xpb1BhZ2FtZW50bz4KICAgICAgICA8L0RhdGlQYWdhbWVudG8+CiAgICAKICAgIDwvRmF0dHVyYUVsZXR0cm9uaWNhQm9keT4KPC9wOkZhdHR1cmFFbGV0dHJvbmljYT6ggg2LMIIHPjCCBSagAwIBAgIDGkgLMA0GCSqGSIb3DQEBCwUAMIGJMQswCQYDVQQGEwJJVDExMC8GA1UECgwoVGVsZWNvbSBJdGFsaWEgVHJ1c3QgVGVjaG5vbG9naWVzIFMuci5sLjEiMCAGA1UECwwZU2Vydml6aSBkaSBjZXJ0aWZpY2F6aW9uZTEjMCEGA1UEAwwaVEkgVHJ1c3QgVGVjaG5vbG9naWVzIENBIDEwHhcNMTcwODI5MTMxOTMwWhcNMjAwODI5MTMxOTI4WjCBvjELMAkGA1UEBhMCSVQxHDAaBgNVBAMME01BU1NJTU8gQkFUVElTVEVMTEExEDAOBgNVBCoMB01BU1NJTU8xFDASBgNVBAQMC0JBVFRJU1RFTExBMRwwGgYDVQQFExNJVDpCVFRNU002NUEyMkk5MDRGMR8wHQYDVQQuExZJVFQyOTA4MTcxMzE5MjI1MTU0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
Reply
#4
Hi Alessandro. Indy works great:

Code:
procedure TForm.Button_DecodeClick(Sender: TObject);
var
 base64: string;
 IdBytes: TIdBytes;
begin
 IdBytes := TIdDecoderMIME.DecodeBytes( mystringencodedbase64.Text );
 base64 := BytesToString( IdBytes, IndyTextEncoding_UTF8 );
end;
In this test case, look the debug picture:
   
Reply
#5
Jose Nilton Pace

thanks Works !
Reply
#6
(05-11-2019, 10:33 PM)Jose Nilton Pace Wrote: Indy works great:

Code:
IdBytes := TIdDecoderMIME.DecodeBytes( mystringencodedbase64.Text );
base64 := BytesToString( IdBytes, IndyTextEncoding_UTF8);

Calling TIdDecoderMIME.DecodeString() as you originally showed should produce the same output as calling TIdDecoderMIME.DecodeBytes() with BytesToString(). If it is not, that will need to be looked into.

Reply
#7
Hi, 

sorry but I have some problems with the suggestions indicated above ...

if the file to be decoded is "simple" ... to the work ....
if instead there are special characters it does NOT work ...

as an attachment it is possible to view the generated file (correct.xml.p7m) and instead the one generated by my delphi code (NotCorrected.xml.p7m)

the code
...............................................

Code:
var
  sfile : AnsiString;
  Base64 : AnsiString;
  IDBytes : TIdBytes;
begin
  ...  
  lHTTP := TIdHTTP.Create;

  //sfile  string in precedent post  (coded64)

  IDBytes := TIdDecoderMIME.DecodeBytes(sfile);
  Base64 := BytesToString(IDBytes, IndyTextEncoding_UTF8);

  StrToFile('c:\temp\NotCorrect.xml.p7m', Base64);
  ...

strtofile is e simple procedure:

Code:
procedure StrToFile(const FileName, SourceString: AnsiString);
var
  Stream : TFileStream;
begin
  Stream:= TFileStream.Create(FileName, fmCreate);
  try
    Stream.WriteBuffer(Pointer(SourceString)^, Length(SourceString));
  finally
    Stream.Free;
  end;
end;

thanks
Alessandro Romano
Reply
#8
Hi Alessandro. Two things.
-1st, what is the source encoding (UTF8, ANSI, ASCII) ???.
-2nd, try another encoding to decode. Your VAR and strtofile are AnsiString.
Base64 := BytesToString(IDBytes, IndyTextEncoding_ANSI);
Base64 := BytesToString(IDBytes, IndyTextEncoding_ASCII);
etc.
Reply
#9
Hi,


> -1st, what is the source encoding (UTF8, ANSI, ASCII) ???. 

UTF8


> -2nd, try another encoding to decode. Your VAR and strtofile are AnsiString.

Base64 := BytesToString(IDBytes, IndyTextEncoding_ANSI);
IndyTextEncoding_ANSI is not defined ... error....


i found in code only:
  function IndyTextEncoding_Default: IIdTextEncoding;

  function IndyTextEncoding_OSDefault: IIdTextEncoding;

  function IndyTextEncoding_8Bit: IIdTextEncoding;

  function IndyTextEncoding_ASCII: IIdTextEncoding;

  function IndyTextEncoding_UTF16BE: IIdTextEncoding;

  function IndyTextEncoding_UTF16LE: IIdTextEncoding;

  function IndyTextEncoding_UTF7: IIdTextEncoding;
  function IndyTextEncoding_UTF8: IIdTextEncoding;

Base64 := BytesToString(IDBytes, IndyTextEncoding_ASCII);
some result...


thanks 
Alessandro Romano
Reply
#10
Try the Indy forums (they are here too) as this is an Indy question and Remy watches those forums.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)