我正在尝试从 this 导入联赛列表XML 文件放入表中。
我能够找到我需要的元素,但如果联赛名称中包含特殊/外来字符,则无法正确显示。
例如,在XML文件中有以下节点:
<trans-unit resname="global.leagueFull.2014.league1005">
<source>Colombia Finalización</source>
</trans-unit>
但是当我运行代码时,该联赛的输出是哥伦比亚 Finalización。
我的代码如下:
<cfscript>
xmlContent = xmlParse("http://www.easports.com/iframe/fut/bundles/futweb/web/flash/xml/localization/messages.en_GB.xml");
subSet = xmlSearch(xmlContent,'/xliff/file/body/trans-unit/');
</cfscript>
<cfloop from="1" to="#ArrayLen(subset)#" index="i">
<cfset resName = subSet[i].xmlAttributes.resName />
<cfif Find("global.leagueFull.2014.league",resName)>
<cfset leagueName = subSet[i].xmlChildren[1].xmlText />
<cfset leagueID = ListLast(resName,".") />
<cfset leagueID = Mid(leagueID,7,15) />
<cfoutput>#leagueName#<br /></cfoutput>
</cfif>
</cfloop>
有谁知道什么可能导致这些字符丢失,以及是否有办法防止或确实补救?
谢谢
最佳答案
如果您看到类似 Finalización
的内容这总是意味着 UTF-8 源已被解释为遗留(即每个字符一个字节)编码。
恭喜,您刚刚在 ColdFusion 中发现了一个错误。 (根据 Adam Cameron 在评论中的提示,这是 Bug #3183072,已在 CF 11 中修复。)
尝试以下解决方法:
<cfhttp url="http://www.easports.com/iframe/fut/bundles/futweb/web/flash/xml/localization/messages.en_GB.xml">
<cfif ListFirst(cfhttp.statusCode, " ") eq "200">
<cfset xmlContent = XmlParse(cfhttp.FileContent)>
<cfset xPath = "/xliff/file/body/trans-unit[starts-with(@resname, 'global.leagueFull.2014.league')]">
<cfset subSet = XmlSearch(xmlContent, xPath)>
<cfloop array="#subSet#" index="transUnit">
<cfset leagueName = transUnit.source>
<cfset leagueID = Mid(ListLast(transUnit.XmlAttributes.resName, "."), 7, 15)>
<cfoutput>#HTMLEditFormat(leagueName)#<br></cfoutput>
</cfloop>
<cfelse>
Error fetching file. (<cfoutput>#cfhttp.StatusCode#</cfoutput>)
</cfif>
请注意,我使用了 XPath 的 starts-with()
替换您的 <cfif>
。这样更加高效和简洁。
关于xml - ColdFusion XML 特殊/外来字符丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25011450/