Windows上的用户名不区分大小写(但保留大小写),因此您可以以UserName
和uSERnAME
身份登录。但是,“case”对于不同的语言环境是不同的 - Windows使用哪种语言环境来决定提供的用户名是否与帐户数据库中的用户名相同?
我相信它是Invariant Locale,并不依赖于“语言和区域选项”对话框中的任何内容,但我可能错了。在任何情况下,我都会感谢像MSDN文章那样的确认(或反驳)。
答案 0 :(得分:2)
UI语言决定了这一点。见this MSDN blog post about the differences。虽然它没有特别提到用户名,但确实说:
Windows中的UI语言是系统用来与用户通信的语言。
这告诉我,在登录之前,这是Windows向用户提供的语言/区域设置。这样,只要系统的UI语言设置为南非荷兰语或日语,就可以使用南非语或日语键盘上的字符键入用户名。
此外,this article表示(在Windows桌面应用程序开发面包屑/树下)
系统专门使用Unicode进行字符和字符串操作。
现在,那说 - 谷歌告诉我(如你所说)用户名的默认Windows处理是“区分大小写”但不是“区分大小写”,这意味着它将在创建用户时按指定存储案例,但在检查凭据时并不关心它。 Active Directory似乎也不区分大小写。
由此我读到在认证过程中输入和保存的用户名有一些硬编码的大小写更改,这意味着如果UI语言设置为en,必须有一些硬编码的UTF-8字符假设-US(可能还有任何语言/语言环境)。我不知道它是否会为任何“西方”的语言环境做到这一点;我找不到任何东西。
答案 1 :(得分:2)
Windows使用“UpCase和二进制比较”方法来比较文件名(请参阅Comparing Unicode file names the right way和Win32 File Name Comparison),因此用户名很可能遵循相同的比较规则(在“用户“文件夹是文件系统的一部分”。使用不变区域设置的比较应该非常接近它,但我不确定。
肯定不会使用用户区域设置,用户UI区域设置等,因为这会使操作系统对象依赖于用户设置。
答案 2 :(得分:0)
这取决于UI语言。不确定其他人,但“案例”中最有问题的语言之一是土耳其语。因为所有其他语言都有较低的字母“i”,上面有一个点,但在土耳其语中我们有“ı”以及“i”。我们还有首都“我”和“İ”。所以它需要一个特定的。
参考wikipedia,用户名与环境变量一起使用,这些变量在Windows中不区分大小写。但正如klugerama所说,它是“案例意识”。