提问人:Lorenzofman 提问时间:11/7/2023 最后编辑:Lorenzofman 更新时间:11/7/2023 访问量:67
为什么 C# 的 NumberFormatInfo 返回法语区域性的阿拉伯百分比符号?
Why C#'s NumberFormatInfo returns the arabic percentage symbol for the french culture?
问:
如果执行此 C# 代码:
using System.Globalization;
using System;
public class HelloWorld
{
public static void Main(string[] args)
{
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("fr-FR");
float p = 0.5f;
Console.WriteLine(p.ToString("P0", CultureInfo.DefaultThreadCurrentCulture));
}
}
显示的结果是:50 ٪
请注意,它使用“٪”(阿拉伯百分号 U+066A)而不是“%”(U+0025)
我找不到任何解释此行为的资源。从语言学的角度来看,这是正确的吗?
此外,与以下问题相关:“谁”负责在 C# 中实现适当的区域性?是操作系统还是 .NET 框架?
我试过什么
我尝试了不同的 C# 环境:我首先在 Unity 项目中发现了问题,然后我创建了上面的示例代码并在一些在线 C# 编译器工具中运行它。我使用的是 Windows 11 机器,但该行为也在 Mac 中重现。我尝试了特定的法国文化和中性的法国文化。两者的效果是一样的
提前致谢,
答:
0赞
Terentiy Gatsukov
11/7/2023
#1
此外,与以下问题相关:“谁”负责在 C# 中实现适当的区域性?是操作系统还是 .NET 框架?
.NET(从 .NET 5 开始).NET (Since .NET 5) .NET 全球化和 ICU
.NET Framework 不依赖于 OS 来获取其区域性数据。相反,它有自己的内部区域性信息数据库,用于确保不同操作系统之间的行为一致。这意味着,如果使用相同版本的 .NET 运行时,.NET 应用程序将在 Windows、Linux 和 macOS 上使用相同的区域性数据。
要解决您的问题,您可以尝试设置正确的百分比符号:
CultureInfo frenchCulture = new CultureInfo("fr-FR");
frenchCulture.NumberFormat.PercentSymbol = "%";
CultureInfo.DefaultThreadCurrentCulture = frenchCulture;
float p = 0.5f;
Console.WriteLine(p.ToString("P0", CultureInfo.DefaultThreadCurrentCulture));
评论
2赞
dbc
11/7/2023
.NET Framework 不依赖于 OS 来获取其区域性数据。相反,它有自己的内部区域性信息数据库,用于确保不同操作系统之间的行为一致。-- 这是真的,但显然只是从 .NET 5 开始。请参阅 .NET 全球化和 ICU。
评论