преобразовать строку в заголовок с неанглийскими символами (юникод) - PullRequest
1 голос
/ 12 декабря 2011

Я пытаюсь преобразовать неанглийскую строку (греческий) в строку заголовка. Я пытался, как подсказывает эта ссылка, но безуспешно, все символы получили верхний регистр Преобразование строки в регистр заголовка

как я могу работать с символами Unicode?

Ответы [ 3 ]

1 голос
/ 12 декабря 2011

Греческий язык не самый простой случай для ToTitleCase с лингвистической точки зрения.

TextInfo ti = new CultureInfo("el-GR", false).TextInfo; 

эксперимент 1:

Console.WriteLine(ti.ToTitleCase("εθνικό χρέος"));

вывод: Εθνικό Χρέος

эксперимент 2:

Console.WriteLine(ti.ToTitleCase("ΕΘΝΙΚΟ ΧΡΕΟΣ"));

вывод: ΕΘΝΙΚΟ ΧΡΕΟΣ

эксперимент 3:

Console.WriteLine(ti.ToTitleCase("ΕΘΝΙΚΟ ΧΡΕΟΣ".ToLower()));

вывод: Εθνικο Χρεοσ

Выход 1 и 3 различны. В выводе 3 пропущены диакритические знаки (тонны по-гречески) в ό и έ и используется σ в конце слова вместо ς (окончательный s - teliko sigma по-гречески). В соответствии с приведенными выше результатами, я предлагаю вам озаглавить регистр только сокращенными фразами и оставить заглавными, как они есть, потому что в результате наверняка будет много ошибок, которые не понравятся вашей греческой аудитории. В качестве альтернативы вы можете найти греческого парня, который поможет вам в результатах лингвистической точности.

Для записи «εθνικό χρέος» означает государственный долг - главная причина переехать в другую не только страну, но и континент с моей семьей.

1 голос
/ 12 декабря 2011

Все символы являются символами Юникода. Мы, говорящие по-английски, не используем магические символы, отличные от Юникода, из другой вселенной, а также символы символов английского языка, используемые на английском языке, настолько неясные, что их пока нет в Юникоде.

Вы не детализируете точно, что вы пытались с TextInfo, и ответ, на который вы ссылаетесь, не очень подробен. Когда я пытаюсь:

CurrentCulture.TextInfo.ToTitleCase("English here, then some Greek: Ποικιλόθρον', ἀθάνατ' ἀφρόδιτα, παῖ δίος, δολόπλοκε, λίσσομαί σε μή μ' ἄσαισι μήτ' ὀνίαισι δάμνα, πότνια, θῦμον·")

Я вернусь:

English Here, Then Some Greek: Ποικιλόθρον', Ἀθάνατ' Ἀφρόδιτα, Παῖ Δίος, Δολόπλοκε, Λίσσομαί Σε Μή Μ' Ἄσαισι Μήτ' Ὀνίαισι Δάμνα, Πότνια, Θῦμον·

Однако, если я начну с прописных букв:

System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase("ENGLISH HERE, THEN SOME GREEK: ΠΟΙΚΙΛΌΘΡΟΝ', ἈΘΆΝΑΤ' ἈΦΡΌΔΙΤΑ, ΠΑῖ ΔΊΟΣ, ΔΟΛΌΠΛΟΚΕ, ΛΊΣΣΟΜΑΊ ΣΕ ΜΉ Μ' ἌΣΑΙΣΙ ΜΉΤ' ὈΝΊΑΙΣΙ ΔΆΜΝΑ, ΠΌΤΝΙΑ, ΘῦΜΟΝ·")

Я все прописными буквами, как вы описать. Вы также начинаете с прописных букв?

Заглавный регистр оставляет все заглавные слова нетронутыми, чтобы избежать повреждения аббревиатур и сокращений, таких как ".NET", "NATO", "ΙΧΘΥΣ" и т. Д. Если вам необходимо разобраться с этим, сначала выполните ToLower:

var ti = System.Globalization.CultureInfo.CurrentCulture.TextInfo;
return ti.ToTitleCase(ti.ToLower("ENGLISH HERE, THEN SOME GREEK: ΠΟΙΚΙΛΌΘΡΟΝ', ἈΘΆΝΑΤ' ἈΦΡΌΔΙΤΑ, ΠΑῖ ΔΊΟΣ, ΔΟΛΌΠΛΟΚΕ, ΛΊΣΣΟΜΑΊ ΣΕ ΜΉ Μ' ἌΣΑΙΣΙ ΜΉΤ' ὈΝΊΑΙΣΙ ΔΆΜΝΑ, ΠΌΤΝΙΑ, ΘῦΜΟΝ·"));
0 голосов
/ 03 августа 2015

Я не могу понять из вопроса, всегда ли он в предложении, когда он входит, но если вам нужно разделить строку в дополнение к Заголовку, возможно, этот метод может помочь вам начать.

private static string ToTitleCase(string example)
{
    var fromSnakeCase = example.Replace("_", " ");
    var lowerToUpper = Regex.Replace(fromSnakeCase, @"(\p{Ll})(\p{Lu})", "$1 $2");
    var sentenceCase = Regex.Replace(lowerToUpper, @"(\p{Lu}+)(\p{Lu}\p{Ll})", "$1 $2");
    return new CultureInfo("el-GR", false).TextInfo.ToTitleCase(sentenceCase);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...