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奥兹:我猜你是指字符串。托洛尔承受的文化负担过重