C# 为什么TextInfo.ToTitleCase不能正确处理字母均为大写的字符串?

C# 为什么TextInfo.ToTitleCase不能正确处理字母均为大写的字符串?,c#,string,cultureinfo,title-case,C#,String,Cultureinfo,Title Case,你能看看我的样品吗 此结果由以下示例生成: var str = @"VIENNA IS A VERY BEAUTIFUL CAPITAL CITY."; var title = new CultureInfo("en-US", false).TextInfo.ToTitleCase(str.ToLower()); MessageBox.Show(title); 因为节目的语言是土耳其语。我想提请您注意虚线字母I。但我们都知道,正确的方法应该是这样的:

你能看看我的样品吗

此结果由以下示例生成:

var str = @"VIENNA IS A VERY BEAUTIFUL CAPITAL CITY.";
var title = new CultureInfo("en-US", false).TextInfo.ToTitleCase(str.ToLower());
MessageBox.Show(title);

因为节目的语言是土耳其语。我想提请您注意虚线字母I。但我们都知道,正确的方法应该是这样的:

维也纳是一个非常美丽的首都


如何获得真实结果?

字符串。ToLower
的重载占用了
文化信息。()

试试像这样的东西

var culture = new CultureInfo("en-US", false);
var title = culture.TextInfo.ToTitleCase(str.ToLower(culture));

如果你想使用美国文化来执行套管作业,你需要始终如一地这样做。相反,您当前在当前区域性中降低了字符串的大小写,这导致了问题

相反,使用相同的
TextInfo
进行下框和标题框操作:

sing系统;
利用制度全球化;
班级计划
{
静态void Main()
{
CultureInfo.CurrentCulture=新的CultureInfo(“tr”);
var text=“维也纳是一个非常美丽的首都。”;
//问题中的原始代码
var title1=new CultureInfo(“en-US”,false).TextInfo.ToTitleCase(text.ToLower());
Console.WriteLine(title1);//包含土耳其语的“i”字符
//修正码
var textInfo=新文化信息(“en-US”,false);
var lower=textInfo.ToLower(文本);
var title2=文本信息ToTitleCase(更低);
Console.WriteLine(标题2);//正确的输出
}
}

(这大致相当于Jens的答案,但如果您使用
TextInfo
进行两种操作,我更愿意使用
TextInfo
,这只是为了一致性。)

@LasseV.Karlsen屏幕截图中小写的
I
,是无点的(
ı
)。土耳其语有点和无点的
i
,无点的
ı
大写为
i
,而点的
i
大写为
İ
。这是“因为节目的语言是土耳其语”。那么为什么只为ToTitleCase函数指定en US?关于
str.ToLower()
?@LasseV.Karlsen-正确的输出应该是:
维也纳是一个非常美丽的首都。
但是他没有像这样的虚线:V
ı
埃那是一个非常美丽的
ı
ful Cap
塔尔C
ı
ty.@HabipO uz你需要在使用托洛尔之前。。。和往常一样,调试程序会立即查明问题所在。ToLower调用生成的
vıennaı是一个非常漂亮的capıtal cıty
@HabipOğuz不是
ToLower
覆盖
CultureInfo
,而是
ToLower
只使用程序的
CultureInfo
,除非您明确指定,您的程序的
CultureInfo
是Turkish@HabipO奥兹:我猜你是指字符串。托洛尔承受的文化负担过重