要使用Flash图表组件 FusionCharts 中的多语言属性,需运用UTF-8编码的XML。值得注意的一点是,XML文件/流需要一个BOM(字节顺序标记-表明一个文件中是否包含UTF-8编码字符串)作为文件的头三个字节。所以,请记住两个最基本的规则:
没有BOM标记,图表中会产生一些异常数据,如下图:
有BOM标记
无BOM标记
1、向静态XML文件中添加BOM
对于一次性生成的静态XML文件,可以手动添加一个BOM标记,这个方法适用于用dataURL方法检索文件中数据的时候,你只需要确保文件中包含带有BOM标记的XML数据。如果没有,就要添加一个BOM进去。步骤如下:
如图所示:
2、用服务器端脚本动态生成XML
要用服务器端脚本生成XML,有以下两种方法:
以下是不同语言添加BOM的方式:
ASP.NET C#
Response.ContentType = "text/xml; characterset=utf-8" ; Response.BinaryWrite( new byte[] { 0xEF, 0xBB, 0xBF } // Now write your XML data to output stream
ASP.NET VB
Response.ContentType = "text/xml" Dim UTFHeader() As Byte = {&HEF, &HBB, &HBF} Response.BinaryWrite(UTFHeader) // Now write your XML data to output stream
PHP
header ( 'Content-type: text/xml' ); echo pack ( "C3" , 0xef, 0xbb, 0xbf ); // Now write your XML data to output stream
ASP
Response.AddHeader "Content-Type", "text/xml;charset=UTF-8" Response.CodePage = 65001" Response.BinaryWrite( chrb(239) ) Response.BinaryWrite( chrb(187) ) Response.BinaryWrite( chrb(191) ) // Now write your XML data to output stream
J2EE
response.setContentType( "text/xml; charset=UTF-8" ); OutputStream outs = response.getOutputStream(); outs.write( new byte[]{(byte)0xEF, (byte)0xBB, (byte)0xBF} ); outs.flush(); // Now write your XML data to output stream
CodeFusion
context = getPageContext(); response = context.getResponse().getResponse(); out = response.getOutputStream(); out.write(239); out.write(187); out.write(191); // Now write your XML data to output stream
ROR
utf8_arr = [0xEF,0xBB,0xBF] utf8_str = utf8_arr.pack("c3") # Now write your XML data to output stream