C#-ToLower()有时会从字母“中删除圆点”;我";

C#-ToLower()有时会从字母“中删除圆点”;我";,c#,string,culture,C#,String,Culture,在对某些字符串调用ToLower()时,我们注意到一个奇怪的错误 输入字符串为: string s = "DocumentInfo"; string t = s.ToLower(); // sometimes, t == documentinfo // other times, t == documentınfo (note dot is missing from i - INCORRECT) 我们将字符串传递给下游的web服务查询,因此它给我们带来了问题 我最初的猜测是,这与文化或UICu

在对某些字符串调用ToLower()时,我们注意到一个奇怪的错误

输入字符串为:

string s = "DocumentInfo";
string t = s.ToLower();
// sometimes, t == documentinfo
// other times, t == documentınfo  (note dot is missing from i - INCORRECT)
我们将字符串传递给下游的web服务查询,因此它给我们带来了问题

我最初的猜测是,这与文化或UICulture有关,因为我们的一些页面会根据用户自定义这些设置

这可能是问题所在吗?有没有办法让它正常工作

更新2011.07.06

我发现我可以通过将区域设置为tr来复制问题。 不确定其他区域性是否受到影响。

尝试使用。

尝试:

s.ToLower(new CultureInfo("en-US", false));

如果得到不同的结果,您的CultureInfo.CurrentCulture可能会设置为其他值。

您当前的文化背景是什么?土耳其,有可能吗?注意:所有“系统”字符串(即对代码而不是对人类有意义的字符串)几乎都应该使用不变的文化(如已回答的)或至少一些已知的固定文化进行比较、排序、大写等。这是必须的链接。如果您要编辑,土耳其确实是这方面臭名昭著的一个-因此“Turkey test”(搜索它),在ITRelated中非常常见:虽然这可能会很好地工作,但不变区域性更方便(您不需要按键查找),更能说明我们的意图,用户应该知道,ToLowerInvariant中的不变量假定他们想要小写的通用英语。根据MSDN:它与英语相关,但与国家或地区无关。但是使用不变量文化与使用英美文化不同。如果您看到ToLowerInvariant,y你可以假设它是一个不可见的字符串,用于内部计算。如果你看到“en-US”,你不知道发生了什么。而且,第一个更容易编写。CultureInfo似乎没有定义?