我试图将非英语字符串(希腊语)转换为标题字符串 我确实试过这个链接建议,但没有运气,所有的角色都得到了大写 Converting string to title case
我如何使用Unicode字符?
答案 0 :(得分:1)
所有字符都是Unicode字符。我们说英语的人不使用来自另一个宇宙的魔法非Unicode字符,英语中使用的字符字符也不是那么模糊,以至于不是Unicode。
您没有准确详细说明使用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: ΠΟΙΚΙΛΌΘΡΟΝ', ἈΘΆΝΑΤ' ἈΦΡΌΔΙΤΑ, ΠΑῖ ΔΊΟΣ, ΔΟΛΌΠΛΟΚΕ, ΛΊΣΣΟΜΑΊ ΣΕ ΜΉ Μ' ἌΣΑΙΣΙ ΜΉΤ' ὈΝΊΑΙΣΙ ΔΆΜΝΑ, ΠΌΤΝΙΑ, ΘῦΜΟΝ·"));
答案 1 :(得分:1)
希腊语对于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缺少变音符号(希腊语中的tonos) 6 和έ并且在单词的末尾使用σ而不是 ς(最终s - teliko sigma in Greek)。根据上面的结果,我建议你只对降低的案例短语进行标题,并保留大写字母,因为结果肯定会有许多错误,希腊观众不会喜欢这些错误。另外,你可以找到一个希腊人来帮助你提高结果的语言准确性。
对于记录,“εθνικόχρέος”意味着国家债务 - 与我的家人不仅仅是国家而是大陆的主要原因。
答案 2 :(得分:0)
我无法从问题中看出它是否总是在句子中出现,但是如果你需要除了Title case之外还要分割字符串,也许这种方法可能会帮助你开始。
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);
}