本配置節是關於配置應用程序的全球化設置。
<globalization <!--以下兩個特性默認編碼為 UTF-8,該編碼在 Machine.config 文件(在安裝 .NET Framework 時創建)的 globalization 節中指定。 如果在 Machine.config 或 Web.config 文件中未指定響應編碼,則編碼默認為計算機的"區域選項"區域設置。 在單服務器應用程序中,此特性和responseEncoding 特性應該相同。 對於不常見的情況(默認服務器編碼不同的多服務器應用程序),可以使用本地 Web.config 文件改變請求和響應編碼。 --> <!--指定每一傳入請求的假定的編碼,包括已傳遞的數據和查詢字符串。如果請求附帶包含一個 Accept-Charset 特性的請求標頭,它將重寫配置中的該特性。--> requestEncoding="any valid encoding string" <!--指定響應的內容編碼。--> responseEncoding="any valid encoding string" fileEncoding="any valid encoding string" responseHeaderEncoding = "any valid encoding string" resourceProviderFactoryType = string <!--目前不使用此特性--> enableClientBasedCulture="true|false" enableBestFitResponseEncoding = "true|false" <!--以下兩個特性的內容可參見System.Globalization.CultureInfo,通常情況下中國簡體是"zh-ch", JA-JP EN-US 日語和英語 (美國)--> <!--為處理傳入的 Web 請求指定默認的區域性。此特性還可以設置為 auto。--> culture="any valid culture string" <!--為處理依賴於區域設置的資源搜索指定默認的區域性。此特性還可以設置為 auto。--> uiCulture="any valid culture string"/>
例如如下設置
<globalization requestEncoding="iso-8859-1" responseEncoding="iso-8859-1"/>
請求時出現中文(字符編碼不對),則會出現亂碼,同樣響應的頁面中的中文也會出現亂碼,正常配置時如下圖所示
設置了響應編碼為iso-8859-1或其他諸如此類ASCII讓中文顯示亂碼的編碼,則會出現
其響應的內容均使用了iso-8859-1而使得中文不能正常顯示。
假若使用了UNICODE作為響應編碼,中文能正常顯示,但是js有報錯,jquery的腳本出現亂碼。
另外在特性中有兩個特性——uiCulture和resourceProviderFactoryType 是和資源相關的,即*.resx這部分的內容,實際上資源並不局限於*.resx,這個可以參考蔣金楠老師的博文。uiCulture是指定ui界面的區域語言。resourceProviderFactoryType則是指定自定義的資源提供者工廠類的完全限定名。例如
<globalization uiCulture="zh-CN" resourceProviderFactoryType="FastDoge.Bussiness.MyResourceProviderFactory, FastDoge.Bussiness"/>
這個類FastDoge.Bussiness.MyResourceProviderFactory繼承抽象類ResourceProviderFactory。重寫兩個方法
public override IResourceProvider CreateGlobalResourceProvider(string classKey); public override IResourceProvider CreateLocalResourceProvider(string virtualPath);
兩個方法區別在於前者是用的是全局資源的ResourceProvider,而後者是對於每個頁面自帶的資源的ResourceProvider。
構造的ResourceProvider實現IResourceProvider接口。實現方法
public object GetObject(string resourceKey, System.Globalization.CultureInfo culture)
和getter屬性
public System.Resources.IResourceReader ResourceReader
GetObject方法是獲取某個資源名的資源值;ResourceReader屬性獲取的IResourceReader獲取整套資源集合的讀取器。ResourceProvider的大致作用則是如此。
在代碼中獲取資源值時調用System.Web.HttpContext的靜態方法GetGlobalResourceObject方法和GetLocalResourceObject
參考文章
.NET的資源並不限於.resx文件,你可以采用任意存儲形式[上篇]
http://www.cnblogs.com/artech/archive/2010/12/16/Reource_framewok_01.html
.NET的資源並不限於.resx文件,你可以采用任意存儲形式[下篇]
http://www.cnblogs.com/artech/archive/2010/12/17/Reource_framewok_02.html
如何讓ASP.NET默認的資源編程方式支持非.ResX資源存儲
http://www.cnblogs.com/artech/archive/2010/12/30/ResourceProvider.html