.net 不同机器中CultureInfo的非相干输出

.net 不同机器中CultureInfo的非相干输出,.net,winapi,cultureinfo,.net,Winapi,Cultureinfo,我依赖.NET CultureInfo对象来获取某些自定义文化的父文化(自定义是指它们代表使用非官方语言配对的国家,如:“en IT”或“fr DE”) 一切都很好,但当涉及到繁体中文(zh-Hant)与中国(通常应该与香港)配对时,我面临一个问题 问题是:在我的开发机器(Windows 10)中,对于特定区域性的“Parent”属性,我的输出与临时服务器(Windows server 2008R2)上的输出不同 从本页开始,每个“传统”文化都将“CHT”(LCID 0x7C04)作为其父文化。

我依赖.NET CultureInfo对象来获取某些自定义文化的父文化(自定义是指它们代表使用非官方语言配对的国家,如:“en IT”或“fr DE”)

一切都很好,但当涉及到繁体中文(zh-Hant)与中国(通常应该与香港)配对时,我面临一个问题

问题是:在我的开发机器(Windows 10)中,对于特定区域性的“Parent”属性,我的输出与临时服务器(Windows server 2008R2)上的输出不同

从本页开始,每个“传统”文化都将“CHT”(LCID 0x7C04)作为其父文化。

这是我正在运行的控制台应用程序:

class Program
{
    static void Main(string[] args)
    {
        System.Console.WriteLine(System.Environment.Version.ToString());
        System.Console.WriteLine("zh-Hant-CN");
        System.Console.WriteLine("Parent Name is: " + System.Globalization.CultureInfo.CreateSpecificCulture("zh-Hant-CN").Parent.Name);
        System.Console.WriteLine("Parent LCID is: " + System.Globalization.CultureInfo.CreateSpecificCulture("zh-Hant-CN").Parent.EnglishName);
        System.Console.WriteLine("Parent LCID is: " + System.Globalization.CultureInfo.CreateSpecificCulture("zh-Hant-CN").Parent.LCID);
        System.Console.WriteLine("zh-Hans-CN");
        System.Console.WriteLine("Parent Name is: " + System.Globalization.CultureInfo.CreateSpecificCulture("zh-Hans-CN").Parent.Name);
        System.Console.WriteLine("Parent Name is: " + System.Globalization.CultureInfo.CreateSpecificCulture("zh-Hans-CN").Parent.EnglishName);
        System.Console.WriteLine("Parent LCID is: " + System.Globalization.CultureInfo.CreateSpecificCulture("zh-Hans-CN").Parent.LCID);

        System.Console.WriteLine("Same culture: " + System.Globalization.CultureInfo.CreateSpecificCulture("zh-Hant-CN")
           .Equals(System.Globalization.CultureInfo.CreateSpecificCulture("zh-Hans-CN")).ToString()
        );
        System.Console.ReadKey();
    }
}
  • 以编译的exe运行,在调试中,使用AnyCpu
  • 针对frameword 4.6.2(使用4.5.0进行了尝试,结果相同)
  • 已安装所有最新的windows更新
我的计算机(Windows 10)上的输出为:

输出在:Win Server 2008R2、Win Server 2012R2、Win 8、Win 7上。是:

4.0.30319.42000
zh-Hant-CN
Parent Name is: zh-CHS
Parent LCID is: Chinese (Simplified) Legacy
Parent LCID is: 4
zh-Hans-CN
Parent Name is: zh-CHS
Parent Name is: Chinese (Simplified) Legacy
Parent LCID is: 4
Same culture: True
知道原因是什么,或者文化存储在哪里(.Net/Windows)吗

多谢各位

请原谅我英语不好

更新 我确实在兔子洞里挖得更深。。。。 从框架()的源代码中,我发现在较低的级别上,会调用getLocaleInfo()Windows API来检索父区域性名称

做了更多的测试后,我发现,用'zh Han?-*'调用该Api会导致一个
错误\u无效\u参数
,但显然只有在非windows 10机器上

因此,我将在问题中添加更多标记

更新#2 不仅繁体中文以简体中文为母,甚至用“zh Hans CN”创建的简体中文也有错误的日期时间格式:例如,月份名称用繁体中文表示(一月) 而不是简化版本(1月)

也就是说,此代码仅在Windows<10:


Console.WriteLine(“同月:”+CultureInfo.CreateSpecificCulture(“zh Hant TW”).DateTimeFormat.缩写月名[0]。等于(CultureInfo.CreateSpecificCulture(“zh Hans CN”).DateTimeFormat.缩写月名[0])。ToString();

我将创建一个单独的对象变量,并在调试期间检查其成员,而不是仅仅打印
父属性。这可能会给您提供更多有用的信息。//
zh CHS
错误,并且它具有LCID 0x0004。
zh CHT
是0x7c04,可能2008R2上的函数只返回较低的字节?//是否正确e与已安装语言的关系(实际上我不这么认为)?我不知道,此指令打印“True”:Console.WriteLine(CultureInfo.CreateSpecificCulture(“zh Hant CN”).Equals(CultureInfo.CreateSpecificCulture(“zh Hans CN”));在两台电脑上均为True?您是在VS Debugging还是在EXE中运行?您是在两台电脑上都有一个相同的EXE,还是在两台电脑上分别编译和运行?//这可能也会有所帮助:Windows 8:相同的结果,比如什么?@TobiasKnauss您知道区域性存储在哪里吗?在.Net Framework还是在Windows中?
4.0.30319.42000
zh-Hant-CN
Parent Name is: zh-CHS
Parent LCID is: Chinese (Simplified) Legacy
Parent LCID is: 4
zh-Hans-CN
Parent Name is: zh-CHS
Parent Name is: Chinese (Simplified) Legacy
Parent LCID is: 4
Same culture: True