将包含XML文本的base64解码为String变量

时间:2019-03-15 20:48:47

标签: xml binary base64 sap abap

我无法解码以base64格式提供的XML,字符串变量($("#myInput").keypress(function(event) { if ( event.which == 13 ) { var searchvalue = $(this).val(); apiCall(); } }); function apiCall(){ $.getJSON("http://www.flickr.com/services/feeds/photos_public.gne?tags='"+searchvalue+"'&format=json&jsoncallback=?", function(data) { $.each(data.items, function(index, element){ console.log(data.items); }); } );} )显示某些内容不可读。

示例:

  

Ü-ÅïÎ#è-´ï®¹ïn÷ëÞ#èMÃÛmõØMôÛm´ë ##ë〜#ë#½èN»Ü=¶ãÞwà]#ßÍüß#ýØ= õÛm´ï〜øë^#ë#µè。# èN¹Ü=¶ïÞ¹ï

代码如下:

lv_string

2 个答案:

答案 0 :(得分:4)

我过去也有这个问题。您可以使用以下

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>
).

答案 1 :(得分:0)

如果我们假设base64字符串包含UTF-8编码的XML,则一个简短的解决方案是使用类DECODE_BASE64的方法CL_HTTP_UTILITY

lv_string = cl_http_utility=>if_http_utility~decode_base64( xml_b64 ).

最小,完整和可验证的示例:

(请允许我重复使用@manuel_b的好例子)

DATA(xml_b64) = `PGh0bWw+PGhlYWQ+PHRpdGxlPlRpdGxlPC90aXRsZT48L2hlYWQ+`
             && `PGJvZHk+PHA+SGVsbG8gV29ybGQ8L3A+PC9ib2R5PjwvaHRtbD4=`.

DATA(lv_string) = cl_http_utility=>if_http_utility~decode_base64( xml_b64 ).

ASSERT lv_string = `<html><head><title>Title</title></head><body><p>Hello World</p></body></html>`.