Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 文件中存在本地化错误的分隔符_C# - Fatal编程技术网

C# 文件中存在本地化错误的分隔符

C# 文件中存在本地化错误的分隔符,c#,C#,在服务器迁移过程中,我有点不知所措,在服务器迁移过程中,我将c#程序从一台服务器移动到另一台服务器,问题发生在数千位分隔符突然改变,而我没有这样做。我猜这是一个定位错误,但我不知道该怎么办 这两台服务器在安装的语言方面是相同的 示例: 932 830,00显示在新服务器上,而不是旧服务器上的932.830,00 代码: public void mydo(double difference, string filepath) { StringBuilder fileContent = ne

在服务器迁移过程中,我有点不知所措,在服务器迁移过程中,我将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());
    }
}
public void mydo(双差,字符串文件路径)
{
StringBuilder fileContent=新的StringBuilder();
追加行(“+String.Format(“{0:n}”,差));
使用(StreamWriter fileHandler=newstreamwriter(filepath))
{
StringBuilder fileContent2=新的StringBuilder();
fileContent2.附录行(“”);
fileContent2.Append(fileContent.ToString());
fileContent2.附录行(“”);
Write(fileContent2.ToString());
}
}

您可以将系统的语言环境设置回en US,正如所说的那样,这会产生所需的数字格式,我无法帮助您,因为我不知道您的服务器配置。或者,您可以使用

String.Format(new CultureInfo("en-US"), "{0:n}", difference);

同时,这里似乎还有更多的问题:

  • 您的本地区域设置似乎使用非分隔符作为千位分隔符,逗号作为十进制符号。您应该在
    String.Format
    Double.ToString
    方法中指定区域性以使用特定区域性。经验法则:格式化/解析数字时,始终指定区域性(或
    不变量区域性
    ),因为默认区域性来自当前区域设置,而当前区域设置在任何地方都可能不同
  • “code>序列”是UTF8文本使用ISO-8859-1或CP1250(拉丁文8位)代码页呈现的典型标志。因此,转储的文本可能是UTF8(这是.NET
    StreamWriter
    类的默认编码),而如果不指定HTML4输出的编码,则默认为ISO-8859-1
  • 实际上,你想用点作为千位分隔符,用逗号作为小数点
明确使用区域性(如德语)可以解决您的数字格式问题:

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

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

System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberGroupSeparator
属性中的内容?@Patrick Hofman:这与本文无关。这是关于windows,而不是java本身的。对链接进行一点解释会很有用。@Patrick Hofman:我以为有人能够点击链接并阅读它……我不能用勺子喂饱每个人。设置文化信息是有效的。在我的例子中,我将它设置为整个线程,然后在您的回答之后:thread.CurrentThread.CurrentCulture=newCultureInfo(“de de”);但我感到困惑的是为什么这是一个问题。因为两台服务器(除了2008年的旧服务器和2016年的新服务器)是相同的。