电子邮件CSV附件中的特殊字符

2020-09-14 00:23发布

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

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


你好

我正在尝试将内部表的内容作为CSV文件附加到电子邮件。 但是,当Excel应用程序打开文件时,特殊字符(在这种情况下为法语)存在问题。 如果使用记事本打开它,一切看起来都很好,所以我认为这是PC问题。 但是,如果直接从记事本创建CSV文件,则这些字符在记事本和Excel中都可以,这表明它毕竟可能是ABAP问题。 但是,我不确定。

这是我尝试过的:

LV_LINE_STR是用逗号分隔的字符串,而换行符是CL_ABAP_CHAR_UTILITIES => CL_LF常量。

尝试1:直截了当:处理纯文本-除特殊字符外,效果很好

呼叫功能'SCMS_STRING_TO_FTEXT'
     出口
       文字= lv_line_str
     输入
       长度= lv_length
     桌子
       ftext_tab = lt_att_content_text。

   lo_document-> add_attachment(
         i_attachment_type = CONV#('CSV')
         i_attachment_subject = CONV#(p_attnam)
         i_attachment_size = CONV#(lv_length)
         i_att_content_text = lt_att_content_text
   )。

 

尝试2:也许UTF-8转换(必须通过二进制)会有所帮助吗? 结果与上面完全相同

数据:
     lt_att_content_text_bin TYPE solix_tab。
   数据(lv_line_str_conv)= cl_abap_codepage => convert_to(
       源= lv_line_str
       codepage ='DEFAULT'"'UTF-8'
   )。

   通话功能'SCMS_XSTRING_TO_BINARY'
     出口
       缓冲区= lv_line_str_conv
    输入
      OUTPUT_LENGTH = lv_length
     桌子
       binary_tab = lt_att_content_text_bin。

   lo_document-> add_attachment(
         i_attachment_type = CONV#('CSV')
         i_attachment_subject = CONV#('物品清单')
         i_attachment_size = CONV#(lv_length)
         i_att_content_hex = lt_att_content_text_bin
   )。

 

提前感谢您的帮助!

KR

伊戈尔

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

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


你好

我正在尝试将内部表的内容作为CSV文件附加到电子邮件。 但是,当Excel应用程序打开文件时,特殊字符(在这种情况下为法语)存在问题。 如果使用记事本打开它,一切看起来都很好,所以我认为这是PC问题。 但是,如果直接从记事本创建CSV文件,则这些字符在记事本和Excel中都可以,这表明它毕竟可能是ABAP问题。 但是,我不确定。

这是我尝试过的:

LV_LINE_STR是用逗号分隔的字符串,而换行符是CL_ABAP_CHAR_UTILITIES => CL_LF常量。

尝试1:直截了当:处理纯文本-除特殊字符外,效果很好

呼叫功能'SCMS_STRING_TO_FTEXT'
     出口
       文字= lv_line_str
     输入
       长度= lv_length
     桌子
       ftext_tab = lt_att_content_text。

   lo_document-> add_attachment(
         i_attachment_type = CONV#('CSV')
         i_attachment_subject = CONV#(p_attnam)
         i_attachment_size = CONV#(lv_length)
         i_att_content_text = lt_att_content_text
   )。

 

尝试2:也许UTF-8转换(必须通过二进制)会有所帮助吗? 结果与上面完全相同

数据:
     lt_att_content_text_bin TYPE solix_tab。
   数据(lv_line_str_conv)= cl_abap_codepage => convert_to(
       源= lv_line_str
       codepage ='DEFAULT'"'UTF-8'
   )。

   通话功能'SCMS_XSTRING_TO_BINARY'
     出口
       缓冲区= lv_line_str_conv
    输入
      OUTPUT_LENGTH = lv_length
     桌子
       binary_tab = lt_att_content_text_bin。

   lo_document-> add_attachment(
         i_attachment_type = CONV#('CSV')
         i_attachment_subject = CONV#('物品清单')
         i_attachment_size = CONV#(lv_length)
         i_att_content_hex = lt_att_content_text_bin
   )。

 

提前感谢您的帮助!

KR

伊戈尔

付费偷看设置
发送
5条回答
大圣 - sap领域执行人,9年sap运营经验
1楼 · 2020-09-14 01:03.采纳回答

HI

请检查SAP示例报告bcs_example_7并将文本字符串转换为utf-16e,就像在此报告中一样。

最好的问候

Jozsef H

spaceman01
2楼-- · 2020-09-14 00:51

涉及的法语字符是什么?

您为什么不提供一个简单的测试程序,以便每个人都可以尝试?


一只江湖小虾
3楼-- · 2020-09-14 00:50

我认为这是MS Excel与CSV问题。 不是SAP或您的程序问题。 使用尝试2时,您的CSV应该很好(UTF-8 CSV)。

您可以尝试通过在Excel中手动打开文件。 CSV文件导入(在向导中,您可以选择分隔符等),也许有编码选择?

无论如何,我只是在Google上搜索了这篇文章(还有其他一些内容): https://donatstudios。 com/CSV-An-Encoding-Nightmare 可能有助于解决问题。


注意:在手动测试中创建CSV文件:

在Windows中创建记事本(TXT)文件时的默认代码页令人惊讶地不是UTF-8。 如果您在记事本中选择"另存为",则可以进行检查(在底部的弹出窗口中有一个代码页选择项。)。

haha101010
4楼-- · 2020-09-14 00:58

您好,Jozsef,

感谢这个提示! 出色的内容转换类CL_BCS_CONVERT(RAW,TXT,STRING,XSTRING,SOLI,SOLIX,BIN,OTF,XTAB,TAB)具有许多好的方法。 就我而言,它神奇地解决了这个问题,并减少了调用次数和自定义代码大小。

干杯!

伊戈尔

空代码
5楼-- · 2020-09-14 00:43

嗨,Tomas,

感谢您的努力! 现在,我了解了有关记事本的一些有用信息:-)

您是对的:通过记事本手动创建的CSV在" ANSI"代码页中创建,在SAP中不可用(或在表TCP00A中以其他方式命名)。 但是幸运的是,类CL_BCS_CONVERT神奇地解决了所有问题。

一周热门 更多>