XML转换时因含瑞典语字符Ø出现无效字符报错该如何解决
解决方案
1. 修正XML源文件编码声明
XML头部必须显式声明支持特殊字符的编码,优先使用UTF-8:
<?xml version="1.0" encoding="UTF-8"?>
如果原文件没有声明,或者错误声明为US-ASCII/ISO-8859-1,处理器会无法识别Ø这类北欧语言特殊字符,直接抛出字符无效报错。
2. 配置XSLT的输入输出编码
首先在XSLT文件头部添加输出编码配置,指定转换后内容的编码规则:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- 新增输出配置 --> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <!-- 剩下的转换逻辑 --> <EXTERNAL_TRANSACTION_CODE> <xsl:value-of select="mvaKode"/> </EXTERNAL_TRANSACTION_CODE> </xsl:stylesheet>
其次要确保调用XSLT转换器时,读取XML源文件的输入流显式指定UTF-8编码,不要依赖操作系统默认编码。
3. 特殊字符兜底处理
如果无法修改源文件的编码配置,可以在取值时添加特殊字符处理规则:
- 允许字符原样输出的场景,添加
disable-output-escaping属性:
<EXTERNAL_TRANSACTION_CODE> <xsl:value-of select="mvaKode" disable-output-escaping="yes"/> </EXTERNAL_TRANSACTION_CODE>
- 需要转义为XML实体的场景,使用替换逻辑:
<xsl:value-of select="replace(mvaKode, 'Ø', 'Ø')"/>
4. 校验文件实际存储编码
用文本编辑器(如Notepad++、VS Code)打开XML源文件,确认文件实际存储的编码和头部声明的编码完全一致,不一致的话转码后重新保存即可解决问题。
内容的提问来源于stack exchange,提问作者Shanka Somasiri
相关产品推荐
相关产品推荐

