Unicode/非Unicode-从文本中替换未知的BEL字符

2020-08-15 13:44发布

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

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


我正在编写一些代码来替换某些文本中的未知字符。 我在sap论坛上看到有关使用cl_abap_char_utilities => charsize来确定abap系统是否为unicode的答案。

  • Unicode系统的值cl_abap_char_utilities => charsize大于1,对吗? 因此我可以使用cl_abap_char_utilities => charsize> 1作为我假设的指标。
  • 非Unicode系统cl_abap_char_utilities =>具有相同逻辑的字符大小等于1吗?

这是一段代码。 这可以用Unicode设置为yes且charsize为2的unicode替换系统中的未知BEL字符07。我只是将xstring转换回字符串。 我不确定它在非unicode系统中的工作方式还是ubel_hex和uspace_hex甚至是正确的值。 任何见识将不胜感激,我只是对cl_abap_char_utilities => charsize意见不一。

数据:
           bel_hex(1)TYPE x VALUE'07'," bel
           space_hex(1)TYPE x VALUE'20'," space
           ubel_hex(2)类型x值'0007',
           uspace_hex(2)类型x值'0020',
           temp_string TYPE字符串,
           lgtxt_xstring TYPE xstring,
           将TYPE REF转换为cl_abap_conv_in_ce。

         temp_string ='一些带有无效BEL字符的字符串'

         通话功能'SCMS_STRING_TO_XSTRING'
           出口
             文字= temp_string
           输入
             缓冲区= lgtxt_xstring。

         如果cl_abap_char_utilities => charsize> 1。
           在字节模式下用space_hex替换lgtxt_xstring中bel_hex的所有出现。
         其他。
           用字节模式中的uspace_hex替换lgtxt_xstring中的ubel_hex的所有出现。
         ENDIF。

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

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


我正在编写一些代码来替换某些文本中的未知字符。 我在sap论坛上看到有关使用cl_abap_char_utilities => charsize来确定abap系统是否为unicode的答案。

  • Unicode系统的值cl_abap_char_utilities => charsize大于1,对吗? 因此我可以使用cl_abap_char_utilities => charsize> 1作为我假设的指标。
  • 非Unicode系统cl_abap_char_utilities =>具有相同逻辑的字符大小等于1吗?

这是一段代码。 这可以用Unicode设置为yes且charsize为2的unicode替换系统中的未知BEL字符07。我只是将xstring转换回字符串。 我不确定它在非unicode系统中的工作方式还是ubel_hex和uspace_hex甚至是正确的值。 任何见识将不胜感激,我只是对cl_abap_char_utilities => charsize意见不一。

数据:
           bel_hex(1)TYPE x VALUE'07'," bel
           space_hex(1)TYPE x VALUE'20'," space
           ubel_hex(2)类型x值'0007',
           uspace_hex(2)类型x值'0020',
           temp_string TYPE字符串,
           lgtxt_xstring TYPE xstring,
           将TYPE REF转换为cl_abap_conv_in_ce。

         temp_string ='一些带有无效BEL字符的字符串'

         通话功能'SCMS_STRING_TO_XSTRING'
           出口
             文字= temp_string
           输入
             缓冲区= lgtxt_xstring。

         如果cl_abap_char_utilities => charsize> 1。
           在字节模式下用space_hex替换lgtxt_xstring中bel_hex的所有出现。
         其他。
           用字节模式中的uspace_hex替换lgtxt_xstring中的ubel_hex的所有出现。
         ENDIF。
付费偷看设置
发送
2条回答
大道至简
1楼 · 2020-08-15 14:47.采纳回答

是的,关于CL_ABAP_CHAR_UTILITIES => CHARSIZE(1或2),您是对的,此测试就足够了:

  • 1:非Unicode
  • 2:Unicode

您正在谈论转换为字节以进行替换,但是如果您的分析与实际情况相符,则不需要。 此外,在Unicode系统中,BEL字符U + 00B7可以有2个字节顺序,即" little endian"或" big endian",分别为" 00B7"或" B700"。 此外,使用SCMS_STRING_TO_XSTRING的方式将字符串转换为UTF-8,因此即使在Unicode系统中,BEL始终使用1个字节的" 07"进行编码。

相反,无需使用字节:

数据:贝尔类型c长度1。
 bel = cl_abap_conv_in_ce => uccp('00B7')。  "适用于所有情况
 用``替换bel in字符串中bel的所有事件。  "警告:请使用反引号

有关信息,所有自7.50起的系统都仅使用Unicode。

d56caomao
2楼-- · 2020-08-15 14:41

如果表STXL中有此类字符(不确定您是否在说话) 大约是同一张"长文本编辑器",也可能是其他表格),我不会修复,风险太大(值得这样做吗?),但我会调查它们在那里的原因,并问负责人。 人们自我修复。

一周热门 更多>