據我所知,不同的區域設置有不同的編碼。對於ICU,我想將UnicodeString轉換爲當前的語言環境編碼,然後再轉換回來。具體來說,我使用的是Boost的文件系統庫,它依次使用Windows的UTF-16或Linux的UTF-8編碼。ICU C++轉換編碼
有沒有辦法使用ICU或其他庫可靠地做到這一點?
據我所知,不同的區域設置有不同的編碼。對於ICU,我想將UnicodeString轉換爲當前的語言環境編碼,然後再轉換回來。具體來說,我使用的是Boost的文件系統庫,它依次使用Windows的UTF-16或Linux的UTF-8編碼。ICU C++轉換編碼
有沒有辦法使用ICU或其他庫可靠地做到這一點?
您可以使用ICU,但您可能會發現足夠多,這對於設置和操作(以及它是Posix的一部分,並且易於在Windows中使用)要簡單得多。
無論使用哪種庫,都必須將Unicode字符串轉換爲寬字符串。在iconv()
那個目標叫做WCHAR_T
。一旦你有一個寬字符,你可以直接在Windows中使用它。
在Linux中,您可以繼續使用wcstombs()
將寬字符轉換爲系統(和語言環境)的窄字符多字節編碼(不要忘記setlocale(LC_CTYPE, "");
),或者,如果您確定要使用UTF -8而不是系統的編碼,你可以直接將原始字符串轉換爲UTF-8(也可以使用任何一個庫)。
也許你會發現我的this post提供一些背景。
我將不得不最終爲Unicode的東西做一個字符串類? – Jookia
我只是使用'std :: vector
找到一個UTF-8字符串庫是否明智?(我懷疑我的問題會比ASCII集,或最高的BMP),然後添加一些iconv的東西呢? – Jookia
使用iconv。 http://www.gnu.org/s/libiconv/documentation/libiconv/iconv.1.html 它被預裝在大多數GNU系統上。
ICU是一個相當沉重的圖書館,它可能是這個簡單的任務矯枉過正。您可能要考慮Linux上的'libiconv'和Windows上的'WideCharToMultiByte'和'MultiByteToWideChar'。如果你真的想要,也可以使用ICU。 –
啊。我不知道,我只是想在我的應用程序中支持Unicode。 – Jookia
可能重複[ICU UnicodeString到區域設置編碼](http://stackoverflow.com/questions/7370679/icu-unicodestring-to-locale-encoding) – tchrist