文件中的千位分隔符出现本地化错误

时间:2018-11-19 09:00:11

标签: c#

在服务器迁移过程中,我有点无所适从,因为我将c#程序从一台服务器移到另一台服务器,问题是成千上万的分隔符突然改变而没有做。我的猜测是它的本地化错误,但是我不确定该怎么办。

两台服务器在安装语言方面都是相同的...。

示例: 932 830,00显示在新服务器上,而不是旧服务器上显示的932.830,00

代码:

public void mydo(double difference, string filepath)
{
    StringBuilder fileContent = new StringBuilder();
    fileContent.AppendLine("            " + String.Format("{0:n}", difference));

    using (StreamWriter fileHandler = new StreamWriter(filepath))
    {
        StringBuilder fileContent2 = new StringBuilder();

        fileContent2.AppendLine("<HTML><BODY>");
        fileContent2.Append(fileContent.ToString());
        fileContent2.AppendLine("</BODY></HTML>");

        fileHandler.Write(fileContent2.ToString());
    }
}

2 个答案:

答案 0 :(得分:1)

似乎同时存在更多问题:

  • 您的本地区域设置似乎将不间断空格用作千位分隔符,将逗号用作十进制符号。您应该在String.FormatDouble.ToString方法中指定区域性以使用特定区域性。经验法则:始终格式化/解析数字时,请指定区域性(或InvariantCulture),因为默认区域性来自当前的区域设置,在任何地方都可以不同。
  • "Â "序列是使用ISO-8859-1或CP1250(Latin1 8位)代码页呈现UTF8文本的典型标志。因此,也许转储的文本为UTF8(这是.NET StreamWriter类的默认编码),但是如果您不指定HTML4输出的编码,则默认为ISO-8859-1。
  • 实际上,您想将点用作千位分隔符,并将逗号用作十进制符号。

明确使用一种文化(例如德语)可以解决数字格式问题:

var culture = CultureInfo.GetCultureInfo("de-DE");
fileContent.Append(difference.ToString(culture));

但是,如果网页包含变音字母或其他非ASCII符号,则编码问题将出现在其他位置。确保将StreamWriter和输出HTML内容都配置为使用相同的编码。

答案 1 :(得分:0)

您可以将系统的语言环境设置回en-US,因为this表示会产生所需的数字格式,由于我对您的服务器配置一无所知,所以我无济于事。或者,您可以使用

绕过系统区域设置
String.Format(new CultureInfo("en-US"), "{0:n}", difference);