全球化非變異模式中的文化特性建立和案例對應
這項中斷性變更以兩種方式影響「全球化非變異模式」:
- 先前,只要文化特性名稱符合 BCP-47 格式,.NET 就允許在全球化非變異模式中建立任何文化特性。 不過,使用的會是不因文化特性而異的資料,而不是實際的文化特性資料。 從 .NET 6 開始,如果您在全球化非變異模式中建立的文化特性並非不因文化特性而異,就會擲回例外狀況。
- 先前,全球化非變異模式僅支援 ASCII 字元的大小寫對應。 從 .NET 6 開始,全球化非變異模式為所有 Unicode 定義字元提供完整的大小寫對應支援。 大小寫對應用於字串比較、字串搜尋和轉換字串大小寫等作業。
全球化非變異模式用於不需要任何全球化支援的應用程式。 也就是說,應用程式執行時,不需要存取文化特性專屬的資料和行為。 某些 Docker 容器預設會啟用全球化非變異模式,例如 Alpine 容器。
舊的行為
在舊版 .NET 中,啟用全球化非變異模式時:
如果應用程式建立的文化特性並非不因文化特性而異,作業會成功,但傳回的文化特性一律使用不因文化特性而異的資料,而不是實際的文化特性資料。
大小寫對應只會針對 ASCII 字元執行。 例如:
if ("Á".Equals("á", StringComparison.CurrentCultureIgnoreCase)) // Evaluates to false.
新的行為
從 .NET 6 開始,啟用全球化非變異模式時:
如果應用程式嘗試建立的文化特性並非不因文化特性而異,CultureNotFoundException 會擲回例外狀況。
大小寫對應會針對所有 Unicode 定義字元執行。 例如:
if ("Á".Equals("á", StringComparison.CurrentCultureIgnoreCase)) // Evaluates to true.
導入的版本
.NET 6
變更原因
引進文化特性建立變更,是為了更輕鬆地診斷文化特性相關問題。 有些使用者不知道其應用程式是在啟用全球化非變異模式的環境中執行。 他們可能會遇到非預期的行為,而且不會聯想到全球化非變異模式,因此很難診斷問題。
引進完整的大小寫對應支援,是為了提升全球化非變異模式的可用性和體驗。
建議的動作
在大部分情況下,不需要採取任何動作。 不過,如果您想要先前的文化特性建立行為,可以設定執行階段組態選項,以允許在全球化非變異模式中建立任何文化特性。 如需詳細資訊,請參閱預先定義的文化特性。
受影響的 API
- CultureInfo
- System.Globalization.CultureInfo.CreateSpecificCulture(String)
- System.Globalization.CultureInfo.GetCultureInfo
- RegionInfo
- 執行字串大小寫轉換、比較或搜尋的任何 API