系统: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