我正在尝试将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>
是否有人知道可能导致这些角色丢失的原因,以及是否有办法预防或确实可以解决这些问题?
由于
答案 0 :(得分:5)
如果您看到像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>
。这更有效率和简洁。