ABAP字符编码转换

2020-09-03 02:46发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)你好 我正在尝试导出编码为IS...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好

我正在尝试导出编码为ISO-8859-15的数据文件。 此代码类型允许使用€,Š,š,Ž,ž,Œ,œ或Ÿ等字符。

我已经研究了可用于此目的的ABAP工具,尤其是通过这种出色的 Sandra Rossi 的encoding + conversion">博客。

在这里您可以找到我的测试代码:

 *&---------------------------------------------  ------------------------ *
 *&报告ZBC_FILE_ENCODING
 *&------------------------------------------------  --------------------- *
 *&编码测试报告
 *&------------------------------------------------  --------------------- *

 报告zbc_file_encoding。

 数据:gv_file TYPE text255,
       gt_file类似于gv_file的标准表,
       gv_filename TYPE字符串,
       gv_path TYPE字符串,
       gv_fullpath TYPE字符串,
       gv_bin_filesize TYPE i,
       gt_bin_data TYPE solix_tab,
       gv_xfile TYPE xstring,
       gv_sfile TYPE字符串,
       gv_sap_codepage TYPE cpcodepage,
       gv_default_file_name TYPE字符串,
       gv_external_name TYPE tcp00a-cpattr,
       go_abap_conv_obj类型参考cl_abap_conv_obj,
       gv_incode TYPE cpcodepage,
       gv_outcode TYPE cpcodepage。

 gv_file ='A; B; C;é;€;Š;š;Ž;ž;Œ;œ;Ÿ'。
 将gv_file附加到gt_file。
 gv_file ='D; E; F;é;€;Š;š;Ž;ž;Œ;œ;Ÿ'。
 将gv_file附加到gt_file。

 将gt_file循环到gv_file中。
   CONCATENATE gv_sfile gv_file cl_abap_char_utilities => cr_lf INTO gv_sfile。
 结局。

 gv_external_name ='ISO-8859-15'。

 通话功能" SCP_CODEPAGE_BY_EXTERNAL_NAME"
   出口
     external_name = gv_external_name
   输入
     sap_codepage = gv_sap_codepage
   例外情况
     其他= 1。

 IF sy-subrc NE 0。
   消息ID sy-msgid类型sy-msgty编号sy-msgno和sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4。
 万一。

 通话功能" SCP_GET_CODEPAGE_NUMBER"
   出口
     database_also =''
   输入
     appl_codepage = gv_incode
   例外情况
     其他= 1。

 IF sy-subrc NE 0。
   消息ID sy-msgid类型sy-msgty编号sy-msgno和sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4。
 万一。

 gv_outcode = gv_sap_codepage。

 创建对象go_abap_conv_obj
   出口
     incode = gv_incode
     输出代码= gv_outcode
     小姐='S'
     ctrlcode ='。'
   例外情况
     其他= 1。

 IF sy-subrc NE 0。
   消息ID sy-msgid类型sy-msgty编号sy-msgno和sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4。
 万一。

 呼叫方法go_abap_conv_obj->转换
   出口
     入口= gv_sfile
     outbufflg = gv_bin_filesize
   输入
     Outbuff = gv_xfile
   例外情况
     其他= 1。

 IF sy-subrc NE 0。
   消息ID sy-msgid类型sy-msgty编号sy-msgno和sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4。
 万一。

 通话功能'SCMS_XSTRING_TO_BINARY'
   出口
     缓冲区= gv_xfile
   输入
     output_length = gv_bin_filesize
   桌子
     binary_tab = gt_bin_data。

 CONCATENATE'test_encoding_'gv_external_name'.csv'INTO gv_default_file_name。

 呼叫方法cl_gui_frontend_services => file_save_dialog
   出口
     default_file_name = gv_default_file_name
   改变
     文件名= gv_文件名
     路径= gv_path
     fullpath = gv_fullpath
   例外情况
     其他= 1。

 IF sy-subrc NE 0。
   消息ID sy-msgid类型sy-msgty编号sy-msgno和sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4。
 万一。

 呼叫方法cl_gui_frontend_services => gui_download
   出口
     bin_filesize = gv_bin_filesize
     文件名= gv_fullpath
     filetype ='BIN'
     show_transfer_status =''
   改变
     data_tab = gt_bin_data
   例外情况
     其他= 1。

 IF sy-subrc NE 0。
   消息ID sy-msgid类型sy-msgty编号sy-msgno和sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4。
 ENDIF。

不幸的是,最后,我没有达到我的期望:

Notepad ++表示格式为Windows-1252,特殊字符弄乱了,甚至连回车符和换行符也无法识别。

关于我做错了什么以及如何实现我的目标的任何想法?

在此先感谢您的帮助。

最诚挚的问候

Marco Silva

(15.6 kB)