ColdFusion XML特殊/外来字符丢失

时间:2014-07-29 08:49:25

标签: xml coldfusion xml-parsing special-characters

我正在尝试将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>

是否有人知道可能导致这些角色丢失的原因,以及是否有办法预防或确实可以解决这些问题?

由于

1 个答案:

答案 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>。这更有效率和简洁。