我已經在這裏搜索了這類問題的答案,並且發現了很多這樣的問題 - 但我仍然對這個問題顯而易見的瑣碎問題持懷疑態度。顯示Unicode字符
我已閱讀這個非常有趣的文章:http://www.joelonsoftware.com/articles/Unicode.html,但它讓我想知道如何在Unicode數據的緩衝區中識別單個字形。
我的問題是:
我如何去分析一個Unicode字符串,說UTF-8?
假設我知道字節順序,當遇到應該由6個字節表示的字形的開始時會發生什麼?
也就是說,如果我正確解釋了存儲的方法。
這與我正在設計使用OpenGL的文本顯示系統有關。 我將字形數據存儲在顯示列表中,我需要將字符串的內容轉換爲字形索引序列,然後將其映射到顯示列表索引(因爲顯然,將整個字形集存儲在圖形內存中並不總是實際的)。
若要將每個字符串表示爲一組短褲,則需要考慮所有需要顯示的內容,從而需要大量的存儲空間。
此外,在我看來,每個字符2個字節根本不足以代表每個可能的Unicode元素。
感謝您的回覆! 根據我讀過的內容,似乎我應該使用UTF-8:我可以按照字節順序不可知的方式迭代字符串,並按照它們出現的方式組合各個代碼點,如可變長度結構。 這讓我很想知道爲什麼wchar_t和它的操縱過程中的糟糕本來就是一個非常好的主意。 – defube 2010-06-18 02:46:50
'wchar_t'意圖足夠大以存儲任何字符。這使得操縱更容易,而不是更難。你可以增加一個'wchar_t *'一次來獲得下一個字符,當你有一個char *指向一個多字節字符串時,這會更難。有一個小的VC++/Windows錯誤,他們在UTF-16字符串中使用'wchar_t',但你不能爲此責怪C++。例如,在Linux上,它只是UTF-32,事情按預期工作。 – MSalters 2010-06-22 08:52:53
我指的是,我必須記住它有多大和字節順序,以及設計代碼,它可以處理有點不可預知的大小和存儲的「原子」數據類型(這與「字節「與」字符「)。 UTF-8煩人迭代,但我的意圖是用它來存儲。如果wchar_t是一個UTF-32,不管編譯器如何,生活會更容易一些(儘管字節順序令人惱火,而且它強制「便攜式」序列化代碼展現出來的不雅感)。 – defube 2010-06-27 23:40:11