常见中文乱码问题
《FusionCharts学习及使用笔记》
在实际工作中刚开始遇到最多的问题就是中文乱码问题,这也是我收到的邮件中朋友们遇到的最多的问题。今天我就在这里总结一下通用的处理方案。希望能对大家有所帮助。
一.调用动态的xml字符串
如果程序是访问动态的xml字符串,这个时候出问题的情况很少,因为生成动态xml字符串的过程中一直保持utf-8状态就OK了。
二.调用静态的xml文件
如果程序是调用静态的xml文件,这个时候出问题的情况就很多了。从我收到的邮件中,大部分都是访问静态的xml文件,也是出问题最多的情况。
这时分两种情况,第一种情况是这个静态的xml文件是你自己动态生成的:那么在你动态生成的时候你需要保存为gbk格式的文件,而非utf-8格式的文件,这样中文就不会有乱码了。第二种情况是这个文件是你拿官方的xml文件改编的:那么你需要把此文件另存为gbk格式的文件,就OK了。
三.link传参出现乱码问题
例:link="JavaScript:myJSFunction('USA', 235);"
link="JavaScript:myJSFunction('中文', 235);"//此时中文会出现乱码
这是一个网友给我发邮件时遇到的问题,其实之前我没有遇见过此问题,因为我之前用到的link里面都只传了数字或英文的参数,还没有传过中文参数。后来我就自己测试了一下,确实存在此问题,无论用何种方式在何种地方去转码都无法解决此问题。我当时也不知道解决方案,过了几个小时脑袋突然灵光一闪,记得自己好像在FusionCharts的官方文档里看到过关于link的文章。那个周六,我花了半天时间把FusionCharts V3.1 API文档,从头到尾翻看了3遍,还是没找到。我当时很郁闷啊,还是不甘心,然后我就在FusionCharts V3.2 API上面找。终于功夫不负苦心人,让我给找到了。见图:
原文如下。
Note: Internally the chart decodes a Url that you set aslink. Before invoking the link it again encodes the Url. If you are passingmultilingual characters via a Url or do not want this decode-encode mechanismto be handled by chart you can set unescapeLinks='0' in <chart> elementof the chart's XML data。
就是说你在xml文件的chart属性中添加 unescapeLinks='0' ,那你的js乱码问题就轻松解决啦。
四. 结束语
以上遇到的乱码问题,应该是FusionCharts中文乱码的常见问题。如果还有其他的问题,以及类似问题的其他解决方案,请email给我,谢谢。
最后还是鼓励大家多看官方文档,虽然我个人觉得V3.1 API比V3.2 API做的好,但V3.2 API里面有很多新东西,大家还是要多看。
以上内容参考文献:FusionChartsV3.1 API&& FusionChartsV3.2 API
四FusionCharts网页乱码
2010-12-15 11:16:12| 分类: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′ />
<setlabel=’Feb’ value=’19800′ />
<setlabel=’Mar’ value=’21800′ />
<setlabel=’Apr’ value=’23800′ />
<setlabel=’May’ value=’29600′ />
<setlabel=’Jun’ value=’27600′ />
<setlabel=’test2′ title=’test’ hint=”test” value=’31800′ />
<setlabel=’Aug’ value=’39700′ />
<setlabel=’Sep’ value=’37800′ />
<setlabel=’Oct’ value=’21900′ />
<setlabel=’Nov’ value=’32900′ />
<setlabel=’Dec’ value=’39800′ />
<styles>
<definition>
<stylename=’Anim1′ type=’animation’ param=’_xscale’ start=’0′ duration=’1′ />
<stylename=’Anim2′ type=’animation’ param=’_alpha’ start=’0′ duration=’0.6′ />
<stylename=’DataShadow’ type=’Shadow’ alpha=’40′/>
</definition>
<application>
<applytoObject=’DIVLINES’ styles=’Anim1′ />
<applytoObject=’HGRID’ styles=’Anim2′ />
<applytoObject=’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所有的中文乱码问题。