ColdFusion XML特殊/外来字符丢失

CPB*_*B07 2 xml coldfusion special-characters xml-parsing

我正在尝试将此 XML文件中的联盟列表导入到表中.

我能够找到我需要的元素,但联盟名称中有一个特殊/外来字符,然后它没有正确显示.

例如,在XML文件中有以下节点:

<trans-unit resname="global.leagueFull.2014.league1005">
    <source>Colombia Finalización</source>
</trans-unit>
Run Code Online (Sandbox Code Playgroud)

但是当我运行我的代码时,这个联盟的输出是哥伦比亚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>
Run Code Online (Sandbox Code Playgroud)

有谁知道可能导致这些角色丢失的原因,以及是否有办法防止或确实补救它?

谢谢

Tom*_*lak 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>
Run Code Online (Sandbox Code Playgroud)

请注意,我已经使用XPath starts-with()来替换你的<cfif>.这更有效率和简洁.