首页 > 编程网络 > 玩转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:中文乱码终极解决之道


分类: 编程网络 标签: , , 1,663次浏览
  1. 2010年5月25日04:19 | #1

    好像不可以哦

  2. 子猴
    2010年5月25日07:22 | #2

    @站长工具
    不知道你说的是怎样的不可以啊?

  3. zhanmsl
    2010年6月4日11:14 | #3

    你好,我也遇到了fusioncharts乱码问题。
    我的问题是这样的,

    在接受页面接受到的参数1的值为乱码。

    另外我也尝试了利用asp.net的server.encode(你好) 这么转义过后,利用fusioncharts弹出一个新的页面参数1也是同样的乱码问题。

    请帮忙解决下,谢谢!

  4. 子猴
    2010年6月5日10:49 | #4

    @zhanmsl
    你是用我这篇文章说的那样做的吗?
    如果不是的话,我只能给你一个解决的思路:
    也就是你要把中文参数进行编码,然后获得后再进行解码,asp.net我不懂,在java中,有URLEncoder、Base64这样的编码工具,我想在asp.net中应该也有类似工具吧?

  5. Larry
    2010年7月6日16:05 | #5

    JSP页面编辑设置成gbk
    xml 设置成gbk

    var chart1 = new FusionCharts(chartSWF, “chart1Id”, “800″, “500″, “0″, “0″);

    chart1.setDataURL(‘FusionCharts/data.xml’); //你的XML文件位置
    直接这样就可以显示 中文了。

  6. 子猴
    2010年7月6日18:36 | #6

    @Larry
    方法应该是不会只有一种的,不过作为通用性来讲,页面编码最好用UTF-8,不知道你有没有试过,设为UTF-8而不是GBK是不是也可以?

  7. 2010年8月9日16:10 | #7

    中文乱码终极解决之道
    什么玩意儿解决办法 忽悠 还王道

  8. 子猴
    2010年8月10日09:16 | #8

    @标题党
    你觉得被忽悠了吗?子猴就为了忽悠你一个人吗?
    写出这些就是为了分享一下,方便碰到同样问题的人,不知道你为什么意见会这么大?

  1. 2010年5月9日22:25 | #1
:wink: :-| :-x :twisted: :) 8-O :( :roll: :-P :oops: :-o :mrgreen: :lol: :idea: :-D :evil: :cry: 8) :arrow: :-? :?: :!: 注意: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。使用'@all ',将会将评论发送给之前所有其它评论者。请务必注意user必须和评论者名相匹配(大小写一致)。