简单转换中的UTF-8编码不一致

2020-08-26 00:17发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)信息:此问题是我之前在此处回答的...

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

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


信息:此问题是我之前在此处回答的问题的后续问题: https://answers.sap.com/questions/12921343/simple-transformation-problems-with-encoding-conve.html

我发现它可以作为一个单独的问题来最有效地处理。

-------------------

使用片段,我实现了XML标记的动态生成,而无需松开左括号和右括号。 但是,如果一个这样的动态标记包含特殊符号,则它们似乎无法正确转换为输出字节字符串。

示例:

字段" DKTXT"是一个包含字符串"Ä&<>"的描述字段。

我想生成以下输出XML(忽略&后面的空格):

 <?xml版本=" 1.0"编码=" utf-8"?>
 <包装>
 
 &Auml;  &amp;  &lt;  &gt; 
 
 
 

使用此ABAP代码进行转换:

数据:lv_xml_out TYPE xsdany。
 呼叫转换zpd_st_nscale_xml_abap
    源包= ms_xml_data-paket
    结果XML lv_xml_out。  "使用rawstring类型的变量,我得到了UTF-8-XML
 

当我从lv_xml_out获取字节并通过在线十六进制<-> utf-8转换器( https://sites.google.com/site/nathanlexwww/tools/utf8-convert ),我得到以下输出:

格式化的XML(忽略&后面的空格)

 <?xml版本=" 1.0"编码=" utf-8"?>
 <包装>
   
     Ä&amp;  &lt;  &gt; 
   
  

原始字节:

 3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D227574662D38223F3E0A3C50616B65743E0A20203C4D657461646174656E3E0A20202020C3C444B5458543EC3842026616D703B20C2B4E3E3C3D3D3C3D3D3D3C3D3D3E0
 

结果:我们的解析输出XML的处理软件抱怨'Ä',并声称UTF-8文件是错误的。

为什么它翻译<,>而不是Ä? 我希望所有符号都可以翻译(即Ä-> @Auml;)。

又如何强制将所有特殊符号转换为HTML字符?

5条回答
Aaron 3364
2020-08-26 00:54

为帮助人们回答,以下是并排显示 文本和UTF-8十六进制数:

 <?xml版本=" 1.0" 3C3F786D6C2076657273696F6E3D22312E3022
  encoding =" utf-8"?> 20656E636F64696E673D227574662D38223F3E0A
 <包装> 3C50616B65743E0A
    20203C4D657461646174656656E3E0A
      202020203C444B5458543E
        Ä&amp;  &lt;  C3842026616D703B20266C743B
        &lt;  202667743B3C2F444B5458543E0A
    20203C2F4D657461646174656656E3E0A
  3C2F50616B65743EF 

如我们所见,Ä表示为C384,在UTF-8中表示Unicode字符U + 00C4,即Ä。

一周热门 更多>