cl_http_utility无法规范我的网址。为什么?

时间:2018-09-06 15:03:56

标签: url unicode abap

通过一个企业娱乐服务使用者,我连接到了Web服务,该服务会向我返回一些数据以及url。

但是,我尝试了上面提到的类的所有方法,但似乎没有方法将URL中的unicode字符转换为正确的可读字符....(在这种情况下为'='和';')..

唯一可以正常运行的方法是“ is_valid_url”,当我通过url时返回false:

http://not_publish-workflow-dev.hq.not_publish.com/lc/content/forms/af/not_publish/request-datson-internal/v01/request-datson-internal.html?taskId\u003d105862\u0026wcmmode\u003ddisabled

我想念什么?

2 个答案:

答案 0 :(得分:2)

似乎这种格式适用于json值。通常,=&不需要使用\u前缀编写。要解码所有\u个字符,您可以使用以下代码:

DATA(json_value) = `http://not_publish-workflow-dev.hq.not_publish.com/lc`
                && `/content/forms/af/not_publish/request-datson-internal/v01`
                && `/request-datson-internal.html?taskId\u003d105862\u0026wcmmode\u003ddisabled`.

FIND ALL OCCURRENCES OF REGEX '\\u....' IN json_value RESULTS DATA(matches).
SORT matches BY offset DESCENDING.
LOOP AT matches ASSIGNING FIELD-SYMBOL(<match>).
  DATA hex2 TYPE x LENGTH 2.
  hex2 = to_upper( substring( val = json_value+<match>-offset(<match>-length) off = 2 ) ).
  DATA(uchar) = cl_abap_conv_in_ce=>uccp( hex2 ).
  REPLACE SECTION OFFSET <match>-offset LENGTH <match>-length OF json_value WITH uchar.
ENDLOOP.

ASSERT json_value = `http://not_publish-workflow-dev.hq.not_publish.com/lc`
                && `/content/forms/af/not_publish/request-datson-internal/v01`
                && `/request-datson-internal.html?taskId=105862&wcmmode=disabled`.

答案 1 :(得分:0)

我不想回答自己的问题,但是无论如何,我通过手动替换那些unicodes找到了自己的解决方案。它与Sandra的想法相似,但是能够转换任何Unicode。

我在这里分享了它,以防万一,任何人都可能需要它。

  DATA: lt_res_tab TYPE  match_result_tab.
  DATA(valid_url) = url.

  FIND ALL OCCURRENCES OF REGEX '\\u.{4}' IN valid_url RESULTS lt_res_tab.

  WHILE lines( lt_res_tab )  > 0.

    DATA(match) = substring( val = valid_url off = lt_res_tab[ 1 ]-offset len = lt_res_tab[ 1 ]-length ).
    DATA(hex_unicode) = to_upper( match+2 ).
    DATA(char) = cl_abap_conv_in_ce=>uccp( uccp = hex_unicode ).

    valid_url = replace( val = valid_url off = lt_res_tab[ 1 ]-offset len = lt_res_tab[ 1 ]-length with = char ).

    FIND ALL OCCURRENCES OF REGEX '\\u.{4}' IN valid_url RESULTS lt_res_tab.

  ENDWHILE.


  WRITE / url.
  WRITE / valid_url.