2010-09-08 45 views
5

我有一個包含UTF-8字符的字符串,並且我有一個方法可以將每個字符轉換爲大寫或小寫,這很容易通過字符與ASCII重疊,顯然有些字符不能轉換,例如任何漢字。然而,是否有一種檢測和轉換可以是上/下的其他字符的好方法,例如,所有的希臘人物?另請注意,我需要能夠在Windows和Linux上執行此操作。將UTF-8字符轉換爲大寫/小寫C++

謝謝

+0

爲了得到一個有用的答案,在這裏弄清術語是很重要的。 UTF-8是RFC 3629(和別處)中指定的字符編碼;它包含用於在unicode字符和可移植地表示這些字符的八位字節序列之間進行映射的算法。請確定類型;甚至更好,顯示包含聲明和類型的代碼。 – 2010-09-08 23:53:51

+1

格雷格你的評論對我來說沒有任何意義,對不起,但我沒有任何代碼但我試圖弄清楚如何做某件事,而不是試圖調試那些不正確工作的東西,這樣對我來說沒有意義,也我知道UTF-8是一種編碼,但這並不能改變我想要實現的目標,它是從「a」 - >「A」或從「Ω」 - >「ω」 – NSA 2010-09-09 00:29:40

+0

目的是什麼?你打算用它來比較這些處理過的字符串嗎?我假設你確實想用它來比較。你是否意識到這不會處理像「ß」和「ss」在德語中相同的東西? – wilx 2010-09-09 10:10:00

回答

13

看一看ICU

請注意,小寫字母到大寫字母的功能與語言環境有關。想想得到「無點小寫我」的土耳其語(ascii)字母I和(ascii)我得到「帶點的大寫字母I」。

+0

非常感謝Alexandre提示,但是我沒有將這個應用程序鏈接到任何第三方庫。所以我需要弄清楚如何在使用該庫的情況下執行此操作。 – NSA 2010-09-09 00:30:58

+0

我建議你編寫自己的案例映射工具,查看http://www.unicode.org/faq/casemap_charprop.html。從那裏你可以下載所有的特殊情況映射。 – tidwall 2010-09-09 00:49:34

+2

C++沒有任何Unicode支持。 ICU是*要走的路。 – 2010-09-09 08:37:17

2

假設您有權訪問wctype.h,然後將您的文本轉換爲2字節的unicode字符串並使用towupper()。然後將其轉換回UTF-8。

+1

或使用ICU亞歷山大提到。 – tidwall 2010-09-08 23:55:51

+1

你不這樣處理德國ß和希臘終端西格瑪。 – 2010-09-08 23:58:19

+0

@Alexandre C .:是否正確轉換的字符完全取決於當前的語言環境。 – caf 2010-09-09 06:49:47

相關問題