玩转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:中文乱码终极解决之道

好像不可以哦
@站长工具
不知道你说的是怎样的不可以啊?
你好,我也遇到了fusioncharts乱码问题。
我的问题是这样的,
在接受页面接受到的参数1的值为乱码。
另外我也尝试了利用asp.net的server.encode(你好) 这么转义过后,利用fusioncharts弹出一个新的页面参数1也是同样的乱码问题。
请帮忙解决下,谢谢!
@zhanmsl
你是用我这篇文章说的那样做的吗?
如果不是的话,我只能给你一个解决的思路:
也就是你要把中文参数进行编码,然后获得后再进行解码,asp.net我不懂,在java中,有URLEncoder、Base64这样的编码工具,我想在asp.net中应该也有类似工具吧?
JSP页面编辑设置成gbk
xml 设置成gbk
var chart1 = new FusionCharts(chartSWF, “chart1Id”, “800″, “500″, “0″, “0″);
chart1.setDataURL(‘FusionCharts/data.xml’); //你的XML文件位置
直接这样就可以显示 中文了。
@Larry
方法应该是不会只有一种的,不过作为通用性来讲,页面编码最好用UTF-8,不知道你有没有试过,设为UTF-8而不是GBK是不是也可以?
中文乱码终极解决之道
什么玩意儿解决办法 忽悠 还王道
@标题党
你觉得被忽悠了吗?子猴就为了忽悠你一个人吗?
写出这些就是为了分享一下,方便碰到同样问题的人,不知道你为什么意见会这么大?