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)
5条回答
派大星 ヾ
2020-09-03 03:41 .采纳回答

这只是一个Notepad ++问题。 它无法有效地猜测实际的代码页是什么(信息未存储),因此有一种非常简单的算法来嗅探第一个字节并以较高的误报率进行猜测。

手动强制Notepad ++考虑 通过菜单为ISO-8859-15,它将显示与ISO-8859-15字符集相对应的字符:

PS:感谢您提供的示例性示例! (尝试回答的人不会浪费时间)

一周热门 更多>