Windows IIS-10上ColdFusion2018的XMLTransform()如何处理UTF-8?
解决IIS 10下ColdFusion XML/XSLT转换的UTF-8乱码问题
先还原你的代码和遇到的问题场景:
代码示例
<cfset myXML = '<?xml version="1.0" encoding="UTF-8"?><foo>I’m coming from the XML.</foo>'> <cfsavecontent variable="myXSL"><?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:template match="/"> <output> I’m coming from the XSLT. <xsl:apply-templates /> </output> </xsl:template> </xsl:stylesheet> </cfsavecontent> <cfset result = XMLTransform(myXML, myXSL)> <cfoutput>#result#</cfoutput>
问题现象
在Windows IIS 10 + ColdFusion 2018环境下运行后出现乱码:I’m coming from the XSLT. I’m coming from the XML.,但Mac/Apache环境正常,这确实是IIS的编码配置不匹配导致的。
解决步骤
1. 配置IIS站点的UTF-8响应头
IIS默认可能使用Windows-1252或其他非UTF-8编码,需要强制站点输出UTF-8:
- 打开IIS管理器,找到你的目标站点
- 双击HTTP响应标头,点击右侧的添加
- 名称填
Content-Type,值填text/html; charset=UTF-8 - 保存配置
或者直接在站点根目录的web.config里添加配置(如果没有就新建):
<configuration> <system.webServer> <httpProtocol> <customHeaders> <add name="Content-Type" value="text/html; charset=UTF-8" /> </customHeaders> </httpProtocol> </system.webServer> </configuration>
2. 检查ColdFusion的编码设置
确保ColdFusion本身输出的内容是UTF-8:
- 登录ColdFusion管理员后台
- 进入服务器设置 > 区域设置
- 把默认字符编码和响应字符编码都设置为
UTF-8 - 保存更改后建议重启ColdFusion服务
3. 在代码中显式指定输出编码
在你的cfoutput之前添加cfcontent标签,强制输出UTF-8编码的内容:
<cfcontent type="text/html; charset=UTF-8"> <cfoutput>#result#</cfoutput>
4. 确认文件本身的编码
如果你的代码是保存在文件中的,确保文件本身是以UTF-8无BOM格式保存的(很多编辑器默认带BOM,会干扰编码识别)。
原因说明
Mac/Apache环境默认通常使用UTF-8作为输出编码,而IIS默认的编码和ColdFusion生成的UTF-8内容不匹配,导致浏览器用错误的编码解析UTF-8内容,从而出现乱码。通过以上步骤统一编码后,就能解决这个问题。
内容的提问来源于stack exchange,提问作者Webucator
相关产品推荐
相关产品推荐

