cl_http_实用程序未规范化我的url。为什么?

cl_http_实用程序未规范化我的url。为什么?,url,unicode,abap,Url,Unicode,Abap,通过Enterprise服务消费者,我连接到一个Web服务,它会返回一些数据和url 但是,我尝试了上面提到的类的所有方法,似乎没有任何方法能够将url中的unicode字符转换为正确的可读字符。。。。(在本例中为“=”和“;”) 唯一正确运行的方法是“is\u valid\u url”,当我传递url时,它返回false,如下所示: http://not_publish-workflow-dev.hq.not_publish.com/lc/content/forms/af/not_publis

通过Enterprise服务消费者,我连接到一个Web服务,它会返回一些数据和url

但是,我尝试了上面提到的类的所有方法,似乎没有任何方法能够将url中的unicode字符转换为正确的可读字符。。。。(在本例中为“=”和“;”)

唯一正确运行的方法是“is\u valid\u 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

我错过了什么

这种格式似乎是针对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`.
数据(json_值)=`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`。
查找json_值结果数据(匹配项)中所有出现的正则表达式“\\u…”。
按偏移量降序对匹配项进行排序。
循环指定字段-SYMBOL()。
数据hex2类型x长度2。
hex2=到上(子字符串(val=json\u值+-偏移(-length)off=2))。
数据(uchar)=cl\u abap\u conv\u in\u ce=>uccp(hex2)。
用uchar替换json_值的SECTION OFFSET-OFFSET LENGTH-LENGTH。
结束循环。
断言json_值=`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`。

这种格式似乎适用于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`.
数据(json_值)=`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`。
查找json_值结果数据(匹配项)中所有出现的正则表达式“\\u…”。
按偏移量降序对匹配项进行排序。
循环指定字段-SYMBOL()。
数据hex2类型x长度2。
hex2=到上(子字符串(val=json\u值+-偏移(-length)off=2))。
数据(uchar)=cl\u abap\u conv\u in\u ce=>uccp(hex2)。
用uchar替换json_值的SECTION OFFSET-OFFSET LENGTH-LENGTH。
结束循环。
断言json_值=`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`。

我不想回答自己的问题,但无论如何,我找到了自己的解决方案,通过手动替换那些Unicode。它与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.

我不想回答自己的问题,但无论如何,我找到了自己的解决方案,手动替换那些Unicode。它与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.

你好听着,这不可能是原因。我知道,我可以自己来代替它,我只是想知道,为什么sap标准不能使用它……它是特定于JSON的,而不是HTTP的,因此它不是在这个CL_HTTP_实用程序中完成的。但你的问题是不清楚你到底从哪里得到这个URL。这种格式是特定于json的吗?我真的很怀疑,但我会问开发者。我从一个java Web服务中获取了大量数据,似乎在HTTP中使用adobe工作流服务,字符使用%进行转义(
%3D
表示
=
%26
表示
&
)嗨。听着,这不可能是原因。我知道,我可以自己来代替它,我只是想知道,为什么sap标准不能使用它……它是特定于JSON的,而不是HTTP的,因此它不是在这个CL_HTTP_实用程序中完成的。但你的问题是不清楚你到底从哪里得到这个URL。这种格式是特定于json的吗?我真的很怀疑,但我会问开发者。我从java Web服务中获取了大量数据,似乎在HTTP中使用adobe工作流服务,字符使用%进行转义(
%3D
对于
=
%26
对于
&
),这几乎是相同的算法,我的建议有什么不同?(我的也可以转换任何Unicode字符)。好的,初始json_值根据您的建议更改。现在看起来好多了。没必要了,我喜欢你的答案,我一般都尊重你。继续,直到下一次。顺便说一句,我这里有一个关于动态selscreen 1000的问题。也许,你也能帮忙。顺便问一下,部分是否跟踪对初始字符串和偏移量的更改?我认为,您至少应该对sandras响应进行投票或将其用作答案。保持这里的精神活力…这几乎是相同的算法,我的建议有什么不同?(我的也可以转换任何Unicode字符)。好的,初始json_值根据您的建议更改。现在看起来好多了。没必要了,我喜欢你的答案,我一般都尊重你。继续,直到下一次。顺便说一句,我这里有一个关于动态selscreen 1000的问题。也许,你也能帮忙。顺便问一下,部分是否跟踪对初始字符串和偏移量的更改?我认为,您至少应该对sandras响应进行投票或将其用作答案。让灵魂活在这里。。。