2012-08-12 44 views
2

如何安排正確處理使用純C++的Unicode字符串?純C++中的Unicode字符串

我的意思是,當你把你的unicode字符串放入std :: string並計算它的長度時,有時你會得到10個字符的5個字符長的字符串。

他們在嚴肅的開源程序中如何做到這一點?他們如何以跨平臺的方式做到這一點?你如何將它綁定到文件I/O和標準輸入/標準輸出流?

謝謝。

+0

'嚴重的開源程序'不計算字符。它幾乎總是沒用,[seriosly](http://utf8everywhere.org/#myth.strlen)。 – ybungalobill 2012-08-30 20:43:11

回答

5

這裏有Boost.Locale,它是用C++編寫的,它包裝了ICU庫,併爲它提供了一個很好的非外來接口。

對於Unicode工作,我的第一個選擇是Boost.Locale,其次是ICU(如果有什麼Boost.Locale尚未包裝)。

4

std::[w]string與流行的看法相反,它沒有任何Unicode支持。它們都以編碼不可知的方式僅在[w]char[_t]單元上操作。

如果您只需要長度和轉換以及編碼驗證形式的基本Unicode支持,則有utfcpp,它爲這些操作提供了一個漂亮的C++接口。

像Qt和wxWdigets這樣的應用程序框架確實提供了它們自己的string類,它們提供了更好的Unicode支持,但通常會捆綁您在整個代碼中使用整個框架。

除此之外,還有ICU,這是圍繞今天的標準Unicode實現。

本網站上的一位C++高手正在進行的工作是ogonek。你一定可以通過StackOverflow聊天室的Lounge<C++>與作者聯繫,詢問他的進展情況。

+0

Woot。良好的破敗和機器人的好插頭 – sehe 2012-08-12 19:19:30

1

ICU目前是 Unicode庫。如果你想跨平臺的Unicode支持,ICU基本上是唯一獲得它的地方。

如果只有它的接口不比自動獵槍的錯誤末端更不友好。

0

我用wxWidgets來做到這一點。它使從std :: string到它們的字符串類型wxString的轉換變得容易。這並不理想,但它運行良好,簡單便攜。