У меня тоже была эта проблема в прошлом.Вы можете использовать следующее
data:
lv_base64 type string,
lv_xstring type xstring,
lv_output type string.
* example base64 string
lv_base64 = 'PGh0bWw+PGhlYWQ+PHRpdGxlPlRpdGxlPC90aXRsZT48L2hlYWQ+PGJvZHk+PHA+SGVsbG8gV29ybGQ8L3A+PC9ib2R5PjwvaHRtbD4='.
* convert base64 to binary (xstring)
call function 'SCMS_BASE64_DECODE_STR'
exporting
input = lv_base64
importing
output = lv_xstring
exceptions
failed = 1
others = 2.
* use codepage conversion to convert xstring to string (UTF-8)
* catch possible conversion errors
try.
lv_output = cl_abap_codepage=>convert_from( source = lv_xstring ).
catch cx_parameter_invalid_range .
catch cx_sy_codepage_converter_init .
catch cx_sy_conversion_codepage .
catch cx_parameter_invalid_type .
endtry.
write lv_output.
В результате получается следующий вывод
<html><head><title>Title</title></head><body><p>Hello World</p></body></html>
Вы можете управлять преобразованием с помощью дополнительных параметров, например:
, если вы предпочитаетеиметь другую кодовую страницу
, если вы хотите заменить невидимые символы специальным символом
, если хотите игнорировать ошибки преобразования
lv_output = cl_abap_codepage=>convert_from(
source = lv_xstring
codepage = <your favourite codepage here>
replacement = <conversion char for not convertible chars>
ignore_cerr = <pass 'X' to ignore conversion errors>
).