CultureInfo.CurrentCulture 不包含正确的值 --> numberformat 问题
Posted
技术标签:
【中文标题】CultureInfo.CurrentCulture 不包含正确的值 --> numberformat 问题【英文标题】:CultureInfo.CurrentCulture does not contain the correct value --> numberformat problems 【发布时间】:2013-09-17 09:19:19 【问题描述】:我需要将双打写入 wpf mvvm 应用程序中的 csv 文件。 这些双打最初是设置在不变文化中的字符串。 我像这样从服务器端应用程序接收它们并用
解析它们bool result = double.TryParse(row[0], NumberStyles.Any, CultureInfo.InvariantCulture, out value);
但是,当我尝试将它们写入 csv 文件("" + value
、value.ToString()
、value.ToString(CultureInfo.CurrentCulture)
或 value.ToString(System.Globalization.CultureInfo.CurrentCulture)
)时,当前的文化似乎是 EN-US 而应该是 NL(荷兰语) )。我的浏览器设置、Windows 设置、键盘设置……都设置为荷兰语,所以当我检查我的区域号码设置时,它包含小数点分隔符“,”,但我的应用程序用“。”分隔小数点。因为文化是 EN-US。
因此,当我编写 csv 文件并在 excel 中打开它时,它包含用“。”分隔的十进制值。代替 ”,”。 这样,我的 excel 不会将这些值视为十进制值,因为它们不在 excel 数字文化/我的 Windows 设置文化中。
有人知道怎么回事吗?
编辑
只是为了清楚。我不是在寻找一种方法来设置硬编码的文化。我特别需要在 windows 中设置的文化,即 excel 使用的文化。
【问题讨论】:
你试过Thread.CurrentThread.CurrentUICulture吗?里面有什么? @GerrieSchenckThread.CurrentThread.CurrentUICulture
将影响资源的加载方式,而不是格式。我猜你的意思是Thread.CurrentThread.CurrentCulture
?
@Fredrik Mörk 我不知道,我通常用它来做格式化。
OP 表示CurrentCulture
已经是dutch
,你应该尝试检查它是否是dutch
(当然在你的代码中)。
@GerrieSchenck 我们在这里偏离主题,但简而言之:如果您在没有指定文化的情况下调用ToString
,它将使用CurrentCulture
自动格式化。如果您调用ToString
并将CurrentUICulture
传递给该方法,那么当然会使用该文化。
【参考方案1】:
以下是问题所在:
我们有一个相当大的应用程序,它可以覆盖日期时间显示等的文化...一旦将当前线程文化设置为新文化,就无法再访问原来的文化了。
为了能够访问 Windows 文化,我创建了一个属性,该属性在更改为应用程序的用户设置之前记住当前文化,并使用该属性将我的数据导出到 csv 文件。
【讨论】:
【参考方案2】:你是否重写了 base.InitializeCulture();
下面的示例代码只是为了理解..也许你有一些想法
if (Session["CurrentUI"] != null)
String selectedLanguage = (string)Session["CurrentUI"];
UICulture = selectedLanguage;
Culture = selectedLanguage;
Thread.CurrentThread.CurrentCulture =
CultureInfo.CreateSpecificCulture(selectedLanguage);
Thread.CurrentThread.CurrentUICulture = new
CultureInfo(selectedLanguage);
base.InitializeCulture();
【讨论】:
感谢您的尝试,但这几乎不是答案,因为我没有会话,也没有会话的 InitializeCulture...以上是关于CultureInfo.CurrentCulture 不包含正确的值 --> numberformat 问题的主要内容,如果未能解决你的问题,请参考以下文章