C# 文件中存在本地化错误的分隔符
在服务器迁移过程中,我有点不知所措,在服务器迁移过程中,我将c#程序从一台服务器移动到另一台服务器,问题发生在数千位分隔符突然改变,而我没有这样做。我猜这是一个定位错误,但我不知道该怎么办 这两台服务器在安装的语言方面是相同的 示例: 932 830,00显示在新服务器上,而不是旧服务器上的932.830,00 代码:C# 文件中存在本地化错误的分隔符,c#,C#,在服务器迁移过程中,我有点不知所措,在服务器迁移过程中,我将c#程序从一台服务器移动到另一台服务器,问题发生在数千位分隔符突然改变,而我没有这样做。我猜这是一个定位错误,但我不知道该怎么办 这两台服务器在安装的语言方面是相同的 示例: 932 830,00显示在新服务器上,而不是旧服务器上的932.830,00 代码: public void mydo(double difference, string filepath) { StringBuilder fileContent = ne
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
类的默认编码),而如果不指定HTML4输出的编码,则默认为ISO-8859-1StreamWriter
- 实际上,你想用点作为千位分隔符,用逗号作为小数点
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年的新服务器)是相同的。