Encoding.RegisterProvider(EncodingProvider) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
注册编码提供程序。
public:
static void RegisterProvider(System::Text::EncodingProvider ^ provider);
[System.Security.SecurityCritical]
public static void RegisterProvider(System.Text.EncodingProvider provider);
public static void RegisterProvider(System.Text.EncodingProvider provider);
[<System.Security.SecurityCritical>]
static member RegisterProvider : System.Text.EncodingProvider -> unit
static member RegisterProvider : System.Text.EncodingProvider -> unit
Public Shared Sub RegisterProvider (provider As EncodingProvider)
参数
- provider
- EncodingProvider
该类的 EncodingProvider 子类提供对其他字符编码的访问权限。
- 属性
例外
provider 是 null。
注解
该方法 RegisterProvider 允许注册派生自 EncodingProvider 的类,使字符编码在不支持字符编码的平台上可用。 注册编码提供程序后,可以通过调用任何 Encoding.GetEncoding 重载来检索它支持的编码。 如果有多个编码提供程序,该方法 Encoding.GetEncoding 将尝试从每个提供程序检索指定的编码,从最近注册的一个提供程序开始。
使用RegisterProvider该方法注册编码提供程序也会影响传递参数GetEncoding(Int32)时的行为0。 这在 .NET Core 和更高版本中尤其重要,其中GetEncoding(Int32) 0 的 codepage 的默认行为是返回 UTF-8:
如果已注册的提供程序为 CodePagesEncodingProvider:
- 在 Windows 上,具有 GetEncoding(Int32) 0 的
codepage返回与系统的活动代码页(与 .NET Framework 行为相同)的编码。 - 在 non-Windows 平台上,它仍返回 UTF-8。
- 在 Windows 上,具有 GetEncoding(Int32) 0 的
如果注册了自定义编码提供程序:提供程序可以选择在传递参数时 GetEncoding(Int32) 返回的
0编码。 提供程序还可以选择不处理此情况,方法是从方法null返回EncodingProvider.GetEncoding,在这种情况下使用默认的 UTF-8 行为。
如果注册了多个提供程序, GetEncoding(Int32) 则首先尝试从最近注册的提供程序检索编码。
从 .NET Framework 4.6 开始,.NET Framework 包括一个编码提供程序,CodePagesEncodingProvider,使编码在完整的 .NET Framework 中提供,但在通用 Windows 平台中不可用。 默认情况下,通用 Windows 平台仅支持 Unicode 编码、ASCII 和代码页 28591。
如果在对方法的多个调用 RegisterProvider 中使用同一编码提供程序,则只有第一个方法调用注册提供程序。 将忽略后续调用。
RegisterProvider如果调用该方法来注册处理相同编码的多个提供程序,则最后一个注册的提供程序用于所有编码和解码操作。 将忽略任何以前注册的提供程序。