C# .NET 4.0中的本地化编码名称

C# .NET 4.0中的本地化编码名称,c#,.net,localization,character-encoding,globalization,C#,.net,Localization,Character Encoding,Globalization,如何在.Net framework 4.0版中获取本地化编码名称 在日本计算机上运行时(区域设置) 这行代码: Encoding.GetEncodings()[0].DisplayName 在.Net 2中运行时,返回字符串“IBM EBCDIC(US-カナダ)" 在.Net 4中运行时,返回字符串“IBM EBCDIC(美国-加拿大)” 当前区域性在这两种情况下都是“ja JP”。编码。GetEncodings()只是系统中所有可用编码的列表。您不应该期望索引0处的编码是您的系统默认编码。使

如何在.Net framework 4.0版中获取本地化编码名称

在日本计算机上运行时(区域设置)

这行代码:

Encoding.GetEncodings()[0].DisplayName
在.Net 2中运行时,返回字符串“IBM EBCDIC(US-カナダ)"

在.Net 4中运行时,返回字符串“IBM EBCDIC(美国-加拿大)”


当前区域性在这两种情况下都是“ja JP”。

编码。GetEncodings()只是系统中所有可用编码的列表。您不应该期望索引0处的编码是您的系统默认编码。使用以下代码获取与当前线程区域性对应的编码

Encoding.GetEncoding(Thread.CurrentThread.CurrentCulture.TextInfo.ANSICodePage)
或者,您可能希望使用
EBCDICCodePage
属性来与您提供的编码更加一致。如果不知道您到底需要它做什么,很难说

我怀疑你真正想要的是当前的文化

Thread.CurrentThread.CurrentCulture.DisplayName
而不是编码,否则你为什么不直接使用UTF-8呢?或者如果你正在寻找“ja-JP”文化的显示名称,那么这应该可以做到

new CultureInfo("ja-JP").DisplayName

很难猜测,Encoding类没有DisplayName属性。如果您实际上是指EncodingName,那么,是的,返回的名称是本地化的,并且取决于计算机上安装的语言包。听起来像是为.NET 2.0安装了日语包,而不是为.NET 4.0安装了日语包


您可以。在单击下载按钮之前更改语言。

我知道这行代码没有多大意义,而且我对返回的第一个编码并不感兴趣,这只是为了演示.net 2和.net 4之间行为的变化。如果您正在查找区域性的本地化名称,我会理解(可通过
NativeName
获取),但为什么您需要编码的本地化名称?我产品中的一个模块显示了可用编码的列表,在我转到.net 4之前,我的日本客户习惯于用日语查看该列表,这种更改对一些不会说英语的客户来说是不舒服的。谢谢!这确实是我缺少的语言包。它一定有wo在.NET2中使用rked是因为它附带了(日本人)windows和已本地化,而.net 4已包含在我的安装程序中。现在我只需要找出一种方法,在任何计算机上以正确的语言安装此程序…不要。这只是您的计算机上的一个问题。您的日本用户当然已经在其计算机上安装了语言包。实际上,自从我的产品安装在大多数情况下,他们的计算机上第一次安装了ls.net 4。我的安装程序需要包含该语言包,否则我将不得不使用web安装程序自动安装该语言包。