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

2020-08-26 00:17发布

         点击此处--->   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字符?

         点击此处--->   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条回答
木偶小白
1楼 · 2020-08-26 00:45.采纳回答

XML完全正常,抱怨的程序错误(或者文件未正确发送)。

Ä表示为C384,在UTF-8中表示Unicode字符U + 00C4是Ä。 在您的XML标头中,明确指出标头后的编码为UTF-8,因此XML在技术上是可以的。

在XML中,唯一需要转义的字符是<和&,如所解释的 在 XML标准中:

&字符(&) 并且左尖括号(<)不能出现在
 其文字形式,除非用作标记定界符或在注释中,
 处理指令或CDATA部分。 如果在其他地方需要它们,他们
 必须使用数字字符引用或字符串"&"进行转义
 

其他字符不需要由其字符实体引用表示。

Aaron 3364
2楼-- · 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,即Ä。

zhangjiyang1323
3楼-- · 2020-08-26 00:47
< p>顺便说一句,为什么要使用在线转换器显示十六进制,为什么不使用ABAP调试器?

小c菟菟
4楼-- · 2020-08-26 00:55

我想使用独立于SAP的工具来制作 确保我不会在SAP ABAP上下文中误解。 另外,我现在可以证明它不是与SAP相关的问题。

灬番茄
5楼-- · 2020-08-26 00:45

您好,Sandra,感谢您的澄清。 它使我对整个主题的理解更好了。 我们将XML文件存储在SAP文件系统中,发现该文件已保存在ANSI中,即"Ä"编码为E4,并且没有UTF-8文件头。

因此,转换是正确的,但存储设备当前会转换编码。

一周热门 更多>