2

你能看看我的样品吗?

在此处输入图像描述

此结果来自以下示例:

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

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

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

我怎样才能得到真实的结果?

4

2 回答 2

4

string.ToLower has an overload that takes a CultureInfo. (Link)

Try something like

var culture = new CultureInfo("en-US", false);
var title = culture.TextInfo.ToTitleCase(str.ToLower(culture));
于 2021-05-28T10:38:06.303 回答
3

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

相反,TextInfo对小写和标题大小写操作使用相同的:

sing System;
using System.Globalization;

class Program
{
    static void Main()
    {
        CultureInfo.CurrentCulture = new CultureInfo("tr-TR");
        var text = "VIENNA IS A VERY BEAUTIFUL CAPITAL CITY.";
        
        // Original code in the question
        var title1 = new CultureInfo("en-US", false).TextInfo.ToTitleCase(text.ToLower());
        Console.WriteLine(title1); // Contains Turkish "i" characters

        // Corrected code
        var textInfo = new CultureInfo("en-US", false).TextInfo;
        var lower = textInfo.ToLower(text);
        var title2 = textInfo.ToTitleCase(lower);
        Console.WriteLine(title2); // Correct output
    }
}

(这大致相当于 Jens 的答案,但TextInfo如果您将其用于任何一个操作,我更喜欢同时使用这两个操作,只是为了保持一致性。)

于 2021-05-28T10:40:26.633 回答