讀者阿木詢問使用 ASP.NET AJAX Control Toolkit 的網頁是否一定要使用 UTF-8 編碼

摘要:讀者阿木詢問使用 ASP.NET AJAX Control Toolkit 的網頁是否一定要使用 UTF-8 編碼

問題:

請問老師
使用ASP.NET.AJAX.Control.ToolKit技術
網頁編碼是不是一定要是utf-8
 

解答:

當您在 ASP.NET 網頁中使用 AJAX Control Toolkit (於撰寫此文時,最新版本為 2007 年 11 月 19 日所發行的 Version 1.0.11119.0)內建的 ToolkitScriptManager 控制項來取代 AJAX Extensions 的 ScriptManager 控制項時,再加上網頁編碼不是採用預設的 UTF-8,那麼於 IE 瀏覽器檢視該網頁時,便會出現如圖表 1 與圖表 2 所示的錯誤訊息。奇怪的是,在 FireFox、Opera 等瀏覽器卻不會發生這個錯誤訊息。
 


圖表 1


圖表 2


欲解決這個問題,請採用下列幾種方式:

1.不使用 ToolkitScriptManager 控制項,改用 ScriptManager 控制項。但是這就失去使用 ToolkitScriptManager 控制項的優勢,原因請參考:http://blog.xuite.net/alwaysfuturevision/liminzhang/12252163
2.依舊使用 ToolkitScriptManager 控制項,但要修改 web.config 裡關於全球化區塊的設定,將處理地區設定相關資源搜尋的預設文化特性之屬性 uiCulture,設定為 en,如下所示即是一例:

<configuration>
    <system.web>
        <globalization
            fileEncoding="big5" requestEncoding="big5" responseEncoding="big5"
            culture="zh-TW" uiCulture="en" />
    </system.web>
</configuration>
 
3.修改 AJAX Control Toolkit 的原始碼,開啟方案檔 AjaxControlToolkit.sln,然後開啟 ToolkitScriptManager.cs (位於 AjaxControlToolkit 專案下的 ToolkitScriptManager 目錄中),移至第 260 行程式碼,將原本的程式碼:

using (StreamWriter outputWriter = new StreamWriter(outputStream))

改寫成:

using (StreamWriter outputWriter = new StreamWriter(outputStream, context.Response.ContentEncoding))

接著按下「建置」功能表中的「建置 AjaxControlToolkit」指令,於建置完畢之後,將重新編譯過的 AjaxControlToolkit.dll 與所需的各語言之 AjaxControlToolkit.resources.dll 複製到您的專案或網站中。


附註:
您必須下載內含程式碼的 AjaxControlToolkit.zip,才能使用方法 3。

章立民研究室 2008/1/20