字符转换:Unicode到非unicode

2020-09-09 12:29发布

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

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


关于此主题的文章很多。 但是他们都没有向我说明它是如何工作的。

SAP中的数据以Unicode格式维护。 但是某些外部合作伙伴要求将数据转换为其他非Unicode字符集。

示例:

在SAP中,字符ß= C39F。

我们的界面合作伙伴希望使用字符集CP437。 在此字符集中,字符ß= E1的代码。

因此,我希望SAP Unicode字符C39F可以转换为字符E1。

如何完成?

关于杰克

 lo_xml = cl_ixml => create()。
 lo_encoding = lo_xml-> create_encoding(byte_order = 0 character_set ='CP437')。
 lo_document = lo_xml-> create_document()。
 lo_stream_factory = lo_xml-> create_stream_factory()。
 lo_stream = lo_stream_factory-> create_ostream_xstring(lv_data)。
 lo_stream-> set_encoding(lo_encoding)。
 lo_renderer = lo_xml-> create_renderer(ostream = lo_stream document = lo_document)。
 lo_element = lo_document-> create_element_ns(`data`)。
 lo_element-> set_attribute_ns(name ='attribute'value =`AAAAßßßß`)。
 lo_document-> append_child(lo_element)。
 lo_renderer-> render()。
 

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

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


关于此主题的文章很多。 但是他们都没有向我说明它是如何工作的。

SAP中的数据以Unicode格式维护。 但是某些外部合作伙伴要求将数据转换为其他非Unicode字符集。

示例:

在SAP中,字符ß= C39F。

我们的界面合作伙伴希望使用字符集CP437。 在此字符集中,字符ß= E1的代码。

因此,我希望SAP Unicode字符C39F可以转换为字符E1。

如何完成?

关于杰克

 lo_xml = cl_ixml => create()。
 lo_encoding = lo_xml-> create_encoding(byte_order = 0 character_set ='CP437')。
 lo_document = lo_xml-> create_document()。
 lo_stream_factory = lo_xml-> create_stream_factory()。
 lo_stream = lo_stream_factory-> create_ostream_xstring(lv_data)。
 lo_stream-> set_encoding(lo_encoding)。
 lo_renderer = lo_xml-> create_renderer(ostream = lo_stream document = lo_document)。
 lo_element = lo_document-> create_element_ns(`data`)。
 lo_element-> set_attribute_ns(name ='attribute'value =`AAAAßßßß`)。
 lo_document-> append_child(lo_element)。
 lo_renderer-> render()。
 
付费偷看设置
发送
3条回答
绿领巾童鞋
1楼 · 2020-09-09 12:54.采纳回答

您的代码正确,但是在表TCP00A(标准名称和SAP代码页编号之间的关系)中没有完整描述一些代码页。 例如,它将与代码页" iso-8859-1"一起使用。

要完成TCP00A,您可能会在笔记 1901768-未为gb18030定义的代码页

去交易SCP。 输入代码页1107(CP437的SAP代码页)。

更改代码页。

添加属性H 0001 CP437和保存。

再次尝试您的程序。

编辑:Eszett字符是Unicode字符U + 00DF。 C39F是其UTF-8中的代码值。 当您指出无效或未知的编码(在TCP00A中)时,该编码将被忽略,因此UTF-8将与XSTRING变量一起使用。

ZJXianG
2楼-- · 2020-09-09 13:12

抱歉,我错过了您的问题(请 使用Comment而不是Answer,以便我得到自动通知,或复制/粘贴我的名字。)

是的,SCP可以使用,但是如果您不习惯工作,可能会有些复杂 与代码页。 另一个解决方案是先用功能模块SCP_REPLACE_STRANGE_CHARS替换加重的字符,然后执行代码页转换。

Tong__Ming
3楼-- · 2020-09-09 13:02

解决了这个问题。

这也向我解释了代码页和字符集之间缺少的链接。

现在大多数字符已正确转换为目标字符集。 缺少的字符将转换为默认情况下为"#"的丢失的转换字符。 很好。

"很好地具有类别"中的下一个转换将是字符Ë的转换。 字符Ë在目标字符集中不可用。 因此将其转换为#。 最好是将其转换为E。您知道这是可能的吗?

感谢和问候

一周热门 更多>