FusionCharts允許你在圖表中使用多語言(UTF-8)字符。在下面的示例中,我們在圖表中使用了阿拉伯語名稱。從FusionCharts v3版本開始,你便可以在所有的FusionCharts圖
FusionCharts允許你在圖表中使用多語言(UTF-8)字符。在下面的示例中,我們在圖表中使用了阿拉伯語名稱。從FusionCharts v3版本開始,你便可以在所有的FusionCharts圖表中使用多語言字符。
注意:目前FusionCharts只支持從左到右語言。不具有像希伯來文等從右到左語言的原生支持。因此,如果你想在FusionCharts中使用希伯來文,你就必需通過編程方式來更改文本序列,然後將數據提供给FusionCharts。
如何使用多語種的字符?
若要在圖表上使用多語言字符,你一定得使用UTF-8編碼的XML。更重要的是,XML文件/流確實需要一個BOM標記來作为前3個字節的文件。因此,我們必須記住兩個基本的規則:
dataURL方法:XML文件/流應具有BOM標記。
dataXML方法:HTML /應用程序文件包含XML並且圖表SWF應該帶有BOM標記。
注意:什麼是BOM?BOM是Byte Order Mark的縮寫,意思是字節次序標記。例如,EF BB EF 這三個字節在UTF-8編碼文件的情況下,BOM被置於文件的開始位置。它標識着該文件包含了UTF-8編碼字符串。
值得注意的是,如果沒有BOM標記,FusionCharts圖表會產生亂碼字符。比較以下2張圖片:
Standard (with BOM) Gibberish (without BOM) 如何添加BOM?
1、在靜態XML中
對於一次性生成和保持靜態的XML文件,你可以手動插入一個BOM標記。當使用 dataURL方法將數據從文件中檢索出來時,就适用該方法。你所需要做的就是,確保含有XML數據的文件中包含了BOM標記,若是沒有BOM標記,那麼 就指定一個。若要指定一個BOM標記,請按照下列步驟:
a、在文本編輯器中打開有問題的文件,如下圖所示(以Windows Notepad为例)。 b、打開“保存”菜單,並指定文件名,文件類型,編碼和BOM標記(如果該選項可用)。 c、保存文件。
下圖为,如何在Windows Notepad中指定BOM標記
下圖为,如何在Dreamweaver for mac中指定BOM標記
2、使用服務器端腳本動態生成XML
在大多數情況下,你不會用到物理數據文件。相反地,你有自己的服務器端腳本,它幾乎可以將 XML數據文件傳遞到圖表中。因此,它無需手動維護。相反,你必須寫服務器端腳本中編寫一些代碼來添加BOM標記。當UTF-8編碼字符串從數據庫和類似 場所進行檢索時,以下方式最實用,你可選擇其中一個執行:
*手動添加BOM到XMLrelayer腳本文件--就像添加BOM標記到靜態XML文件一样,你也可以將BOM文件添加到服務器端。在你編碼之前,當你首次創建腳本文件時,你就需要這样做。
*使用腳本編寫BOM--在大多數情況下,XML RELAYER腳本文件可能會被創建成ANSI編碼格式。在這種情況下,在開始輸出流的時候,你就得使用腳本來添加BOM。此外,當一個服務器端腳本創建 一個XML文件時,所添加的BOM標記,應該被看作文件的前3個字節。
下面的例子中,我們利用了主要的服務端技術來實現BOM標記:
Using 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
Using 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
Using PHP
header ( 'Content-type: text/xml' );
echo pack ( "C3" , 0xef, 0xbb, 0xbf ); // Now write your XML data to output stream
Using 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
Using 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
Using ColdFusion
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
Using ROR
utf8_arr = [0xEF,0xBB,0xBF]
utf8_str = utf8_arr.pack("c3") # Now write your XML data to output stream |
沒有留言:
張貼留言