欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Unicode字符编码与解码关于乱码的abap_encoding问题以及MESSAGE异常

程序员文章站 2024-03-13 09:56:45
...

系统:SAP ERP ABAP

背景:一般这种问题出现在接口中,Unicode字符编码与解码的乱码,因为接口会把对方系统返回的信息进行各种编码,这时候就要使用正确的abap_encoding参数。

案例:SAP ERP->用友NC(JAVA),HTTP_POST交互,接受响应报文如果含有汉字,全是乱码,因为外部的系统是其他编码,并且如果对乱码的message进行消息抛出,则会导致消息抛出异常,系统一直转圈圈,只能结束事务。

解决:在本案例中,使用函数SCMS_BINARY_TO_TEXT进行编码,入参ENCODING如果使用的是UTF-8,则abap_encoding设置成4110 ,则问题解决。

其他:其实SAP中对字符编码与解码的函数或方法有很多,并且很多都有abap_encoding的参数,所以如果大家遇到类似问题都可以检查一下自己程序内的abap_encoding值,并且知道对接系统的字符编码。

如何将外部字符集名转换为内部编码?SAP有自己的转换函数:SCP_CODEPAGE_BY_EXTERNAL_NAME
代码:

DATA:xstr TYPE xstring,
          str  TYPE string,
          lv_codepage(4) TYPE n .
"方法1:函数
CALL FUNCTION 'SCP_CODEPAGE_BY_EXTERNAL_NAME'
  EXPORTING
    external_name = 'UTF-8'
  IMPORTING
    sap_codepage  = lv_codepage.
"方法2:方法
lv_codepage = cl_abap_codepage=>sap_codepage( 'UTF-8' ).
"编码
xstr = cl_abap_codepage=>convert_to(
  source      = '要编码的内容'
  codepage    = `UTF-8` ).
"解码
str = cl_abap_codepage=>CONVERT_FROM(
  source      =  xstr
  codepage    = `UTF-8` ).

对我解决此问题的帮助文档来自江正军的技术博客,里面有比较详细的讲“字符编码与解码、Unicode”的细节:
https://www.cnblogs.com/jiangzhengjun/p/4265650.html