2014-08-31 26 views
0

我需要使用多平臺(Linux,Windows)方法將UTF-8字符串轉換爲本地多字節編碼(cp1251)。然而,我找不到一個標準(最好是STL)方法,它可以在兩種平臺上工作,除了首先將UTF-8轉換(使用std::codecvtstd::locale)爲寬字符串,然後將寬字符串轉換爲本地字符串。有一種方法可以通過一次轉換來完成此操作嗎?UTF-8到STL的本地多字節

+0

1)cp1251不是多字節編碼2)Linux幾乎從不使用cp1251,它幾乎只使用UTF-8。 – 2014-08-31 12:50:11

回答

0

標準庫不包含任何將執行此操作的內容。至少並非如此,並且您需要的組件之一尚未在任何C++實現中實現:您可以使用可在UTF-8和UTF-16或UTF-32之間進行轉換的codecvt方面,然後使用<cuchar>標題將UTF-16或UTF-32轉換爲區域設置多字節編碼。

由於該選項不可用,所以最好的選擇是使用便攜式庫,或者使用各種平臺特定的API自己實現轉換,然後使用可跨平臺使用的通用API對其進行打包。您可以在posix平臺上使用libiconv,在Windows上使用MultiByteToWideChar和WideCharToMultiByte。

+0

感謝您澄清這一點。我想我會用STL進行兩階段轉換。 – 2014-08-31 07:06:26