ABAP字符编码转换

2020-09-03 02:46发布

         点击此处--->   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)

         点击此处--->   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条回答
派大星 ヾ
1楼 · 2020-09-03 03:41.采纳回答

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

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

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

me_for_i
2楼-- · 2020-09-03 03:40

嗨,马可,

是否必须达到ISO-8859-15还是这样?

大简至美
3楼-- · 2020-09-03 03:41

你好,

我必须生成一个合法使用ISO-8859-15编码的文件。 但是我想重点是允许使用欧元符号(€)。

无论如何,由于我可以在SAP表TCP00A中找到页面代码1164的ISO-8859-15属性,因此系统不应该能够以正确的编码创建文件吗?

谢谢。

Marco

三十六小时_GS
4楼-- · 2020-09-03 03:35

Marco SILVA ,为什么要使用ISO -8859-15,而不是UTF-8(=文件的前3个字节可以包含BOM表,该表可以标识它是UTF-8文件;比ISO实用得多)。

5楼-- · 2020-09-03 03:30
# p #

我想您仍然会使用正确的编码来解决文件本身的问题,但是至少在N ++中,您可以使用编码来查看正确的表示形式。

更新:

这是通过不将CRLF添加到表行来完成的。 不转换表行。 因此只需提供表(gt_file)并使用代码页1164进行gui_download。

一周热门 更多>