首页 > 编程网络 > 玩转FusionCharts:中文乱码终极解决之道

玩转FusionCharts:中文乱码终极解决之道

2010年2月2日 子猴   字体大小: 发表评论 阅读评论

尘归尘,土归土,乱码应归垃圾桶。这篇文章就是来彻底终结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:中文乱码终极解决之道

分类: 编程网络 标签: , , 64次阅读
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.
:wink: :-| :-x :twisted: :) 8-O :( :roll: :-P :oops: :-o :mrgreen: :lol: :idea: :-D :evil: :cry: 8) :arrow: :-? :?: :!: