玩转FusionCharts:中文乱码终极解决之道
尘归尘,土归土,乱码应归垃圾桶。这篇文章就是来彻底终结FusionCharts中文乱码问题的!
通常而言,FusionCharts的中文乱码其实还并不太常见,比如,你将FusionCharts随带的例子中的xml文件中的某一英文改为中文(比如Pie3D.html),运行后,中文其实是可以显示的。但你也可能注意到,在这种方式下,是直接从硬盘读取的xml文件,也就是你每次显示一次Flash图表,都要进行一次I/O操作,很显然,这种方式肯定是不大好的,所以你很可能就想到了一次性将xml读取出来放在内存里或是就放在页面的一个隐含参数里(比如type=hidden的隐含参数),那么这个时候,中文乱码就产生了!
现在我们不采用直接读取xml文件的形式,而是将读取的xml文本存储在页面一个隐含参数中,如(注:将采用jsp的形式,其他语言都是类似的):
<div name="chartXml" style="display:none"><%=chartXml%></div>
而chartXml就是xml文本,与xml文件中的内容是一致的,例如:
<chart caption='月销售汇总' subcaption='2006年' formatNumberScale='0' xAxisName='Month' yAxisName='Sales' yAxisMinValue='15000' numberPrefix='a' numberSuffix='b' showValues='1' alternateHGridColor='FCB541' alternateHGridAlpha='20' divLineColor='FCB541' divLineAlpha='50' canvasBorderColor='666666' baseFontColor='666666' lineColor='FCB541' >
<set label='Jan' value='17400' />
<set label='Feb' value='19800' />
<set label='Mar' value='21800' />
<set label='Apr' value='23800' />
<set label='May' value='29600' />
<set label='Jun' value='27600' />
<set label='test2' title='test' hint="test" value='31800' />
<set label='Aug' value='39700' />
<set label='Sep' value='37800' />
<set label='Oct' value='21900' />
<set label='Nov' value='32900' />
<set label='Dec' value='39800' />
<styles>
<definition>
<style name='Anim1' type='animation' param='_xscale' start='0' duration='1' />
<style name='Anim2' type='animation' param='_alpha' start='0' duration='0.6' />
<style name='DataShadow' type='Shadow' alpha='40'/>
</definition>
<application>
<apply toObject='DIVLINES' styles='Anim1' />
<apply toObject='HGRID' styles='Anim2' />
<apply toObject='DATALABELS' styles='DataShadow,Anim2' />
</application>
</styles>
</chart>
调用显示的地方为:
<script type="text/javascript">
var chart = new FusionCharts("FusionCharts/Pie3D.swf ", "ChartId", "100%", "300", "0", "0" );
var chartXMLObj = document.getElementById("chartXml");
var chartXML = chartXMLObj.innerHTML;
//解决中文乱码的最关键一行
//有时,如果没有这一行,可能也不会有乱码
//但大多数时候会有乱码,所以这行一定不能掉
//encodeURI是对chartXML进行编码
chartXML = encodeURI(chartXML);
chart.setDataXML(chartXML);
</script>
这种方式我认为可以解决FusionCharts所有的中文乱码问题。
转载请注明: 转载自子猴个人博客
本文链接地址: 玩转FusionCharts:中文乱码终极解决之道