在C++中,用於存儲UTF-8字符串的最佳類型是什麼?如果可能的話,我想盡量避免滾動我自己的班級。UTF-8數據的最佳類型?
我最初的想法是std::string
- 但是,這使用char
作爲基礎類型。 char
可能未簽名或簽名 - 它有所不同。在我的系統上,它已經簽名。但是,UTF-8代碼單元是未簽名的八位字節。這似乎表明它是錯誤的類型。
這導致我們到std::basic_string<unsigned char>
- 這似乎符合法案:無符號,8位(或更大)的字符。
但是,大多數事情似乎使用char
。例如,glib使用char
。 C++的ostream
的使用char
。
想法?
使用std :: string唯一真正的問題是,由於UTF-8是一種多字節編碼,因此預計可以處理字符的一些操作符實際上最終可能會處理部分字符。例如,除了不能直接訪問字符串長度以外,使用operator []將被打破以獲取「字符」。 (尺寸可用,但不是長度)。 – 2009-09-29 04:19:11
您只需要將字符串視爲代碼單元數組而不是字符數組。然後,唯一不起作用的'string'成員函數就像'find_one_of'那樣將一組字符作爲參數。 – dan04 2011-02-11 13:53:36
@Evan:「字符」和「長度」的定義在Unicode中非常複雜(因爲組合和連字和東西),它們永遠不會被直接訪問。最好不要假裝他們是。 – 2011-09-13 10:04:10