2011-12-11 68 views
1

我試着去非英語字符串(希臘)轉化爲標題字符串 標題情況下,我曾嘗試爲這個鏈接建議,但沒有運氣,所有的字符有大寫 Converting string to title case字符串轉換爲使用非英文字符(Unicode)的

我該如何使用Unicode字符?

+0

您是否將TextInfo用於希臘文化? – mmix

+0

當我嘗試時可以正常工作。當然,你可以發表一個小片段來證明這個問題? –

+0

@mmix不管文化如何,希臘字母在英語或法語等非希臘語中使用都沒有關係,那麼Π仍然是π的大寫形式,依此類推。這個想法是處理比默認更多的規則,比如在en-US ijssel將TitleCase轉換爲Ijssel,但在nl-NL中將TitleCase轉換爲IJssel。不幸的是,目前的過度簡單實現忽略了這一點(文檔中注意到這是語言不正確,但速度很快,並保留將來更改爲更準確算法的權利)。 –

回答

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」的縮寫,‘北約’,‘ΙΧΘΥΣ’等,如果您需要解決這個問題,做ToLower將第一:

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

埃德,這個答案開始時發生了什麼?你是否打算複製整個問題? – jwiscarson

+0

@jwiscarson不知道那裏發生了什麼!我唯一想複製粘貼的位是在答案本身內重複的位。肯定是一個錯誤的點擊選擇整個頁面。 –

+0

所以我只是不明白什麼是解決方案? – user63898

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在όέ缺少附加符號(希臘託諾斯),並使用σ在字的結束,而不是ς(終秒 - 在希臘語teliko Sigma)中。根據上述結果,我建議您僅標題案例降低案例短語並保留大寫字母,因爲結果肯定會導致希臘觀衆不喜歡的許多錯誤。或者,您可以找到一位希臘人幫助您獲得語言準確性的結果。

對於「εθνικόχχέος」的記錄意味着國家債務 - 轉移到另一個不僅是國家,而是與我的家人大陸的主要原因。

+0

您的大寫形式是EINOKOΧΡΕΟΣ(U + 039F GREEK CAPITAL LETTER OMICRON)而不是EINNKΌΧΡΟΟΣ(U + 038C GREEK CAPITAL LETTER OMICRON WITH TONOS)。授予的tonos一般不會顯示爲大寫 - 上面的外觀在我的系統中完全相同,但它在結果中顯示爲「ti.ToUpper(」ΕθνικόΧρέος「)'Console.WriteLine(ti.ToTitleCase(」ΕθνικόΧρέος「 .ToUpper()。ToLower()));'正常工作。 當然,中間和最終西格瑪的問題仍然存在。儘管如此,代碼處理希臘語,荷蘭語或德語,並且比愛爾蘭語更好 - 至少它不會改變意義! –

+0

正確。但是這是有目的的,因爲你永遠不會發現一個希臘字母大寫的變音符號。 – 2011-12-12 00:39:06

+0

是的。這就像法國的口音(法國作家有文獻記載的情況是法國作家在首都使用口音,但這種風格非常罕見,很多法國人會告訴你,否則 - 我曾遇到一個剛完成語言調查的人,每個法語母語人士他問道,從來沒有首都的口音,在回家的路上,他看到一個有大寫字母的大寫海報!)我知道的話題非常重要,但事情總是如此嗎?我知道在某些語言中,大寫字母會丟失重音,因爲以這種方式進行舊式打印和打字更容易。希臘文是否一樣? –

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); 
} 
相關問題