【问题标题】:Localized encoding name in .NET 4.0.NET 4.0 中的本地化编码名称
【发布时间】:2012-01-01 17:05:24
【问题描述】:

如何在 .Net 框架 4.0 版中获得本地化编码名称?

在日本电脑上运行时(区域设置)

这行代码:

Encoding.GetEncodings()[0].DisplayName

在 .Net 2 中运行时,返回字符串“IBM EBCDIC (US - カナダ)”

在 .Net 4 中运行时,返回字符串“IBM EBCDIC (US-Canada)”

在这两种情况下,当前的文化都是“ja-JP”。

【问题讨论】:

  • 我知道这行代码没有多大意义,而且我对返回的第一个编码并不感兴趣,这只是为了演示 .net 2 和 .net 之间的行为变化。净 4

标签: c# .net localization character-encoding globalization


【解决方案1】:

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

您可以download it here。在点击下载按钮之前更改语言。

【讨论】:

  • 谢谢!,确实是我缺少的语言包。它必须在 .net 2 中工作,因为它带有(日文)窗口并且已经本地化,而 .net 4 包含在我的设置中。现在我只需要想办法在任何计算机上以正确的语言安装它......
  • 不要。这只是您机器上的问题。您的日本用户当然已经在她的机器上安装了语言包。
  • 实际上,由于我的产品在大多数情况下都是第一次在他们的计算机上安装.net 4,所以他们没有语言包。我的设置需要包含它,否则我必须使用网络安装程序来自动安装它。
【解决方案2】:

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

Encoding.GetEncoding(Thread.CurrentThread.CurrentCulture.TextInfo.ANSICodePage)

或者您可能希望使用EBCDICCodePage 属性与您提供的编码更加一致。很难说不知道你到底需要什么。

我怀疑你真正寻找的是当前的文化

Thread.CurrentThread.CurrentCulture.DisplayName

而不是编码,否则为什么不直接使用 UTF-8?或者,如果您正在寻找“ja-JP”文化的显示名称,那么应该这样做

new CultureInfo("ja-JP").DisplayName

【讨论】:

  • 如果您正在寻找一种文化的本地化名称(您可以通过 NativeName 获得),我会理解,但为什么您需要编码的本地化名称?
  • 我的产品中的一个模块显示了可用编码的列表,在我迁移到 .net 4 之前,我的日本客户过去常常用日语查看该列表,这种变化让一些不会说话的人感到不舒服英语。
猜你喜欢
  • 1970-01-01
  • 2020-10-21
  • 2014-02-26
  • 1970-01-01
  • 1970-01-01
  • 2018-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多