2013-08-19 62 views
2

如何獲得包含一些非ASCII字符的std::wstring的子字符串?獲取std :: wstring的子字符串

下面的代碼無法正常輸出:
(文本是一個阿拉伯語詞包含4個字符,每個字符有兩個字節,加上單詞「你好」)

#include <iostream> 
#include <string> 

using namespace std; 

int main() 
{ 
    wstring s = L"سلام hello"; 
    wcout << s.substr(0,3) << endl; 
    wcout << s.substr(4,5) << endl; 

    return 0; 
} 
+0

第二個至少應該打印「地獄」,並在Coliru上做。第一個可能不能打印在你應該使用的控制檯上。 – chris

+0

是的,這是奇怪的部分。我什麼也沒得到。 – MBZ

+0

你在運行這個代碼的操作系統是什麼? –

回答

0

這應該工作:live on Coliru

#include <iostream> 
#include <string> 
#include <boost/regex/pending/unicode_iterator.hpp> 

using namespace std; 

template <typename C> 
std::string to_utf8(C const& in) 
{ 
    std::string result; 
    auto out = std::back_inserter(result); 
    auto utf8out = boost::utf8_output_iterator<decltype(out)>(out); 

    std::copy(begin(in), end(in), utf8out); 
    return result; 
} 

int main() 
{ 
    wstring s = L"سلام hello"; 

    auto first = s.substr(0,3); 
    auto second = s.substr(4,5); 

    cout << to_utf8(first) << endl; 
    cout << to_utf8(second) << endl; 
} 

打印

سلا 
hell 

坦率地說,雖然,我認爲你的substring調用正在做出奇怪的假設。讓我建議在一分鐘內修復:

+0

祝你好運嘗試UTF8在Windows上的控制檯輸出... –

相關問題