將std :: wstring轉換爲std :: string的最簡潔方法是什麼?我過去曾使用過W2A等宏,但我從未喜歡它們。從寬到窄的字符
從寬到窄的字符
回答
最原始的方式是std::ctype<wchar_t>::narrow()
,但這只不過比std :: copy更像gishu建議的,你仍然需要管理自己的緩衝區。
如果您不想執行任何翻譯,但只想要一行,您可以做std::string my_string(my_wstring.begin(), my_wstring.end())
。
如果你想要實際的編碼轉換,你可以使用locales/codecvt或其他答案的庫之一,但我猜這不是你想要的。
在這種情況下,一個內襯工作正常。謝謝! – DanDan 2009-12-31 15:44:58
看看這是否有幫助。這個使用std :: copy來實現你的目標。
http://www.codeguru.com/forum/archive/index.php/t-193852.html
我不知道它是否「最乾淨」,但我已經使用copy()函數,沒有任何問題到目前爲止。
#include <iostream>
#include <algorithm>
using namespace std;
string wstring2string(const wstring & wstr)
{
string str(wstr.length(),’ ‘);
copy(wstr.begin(),wstr.end(),str.begin());
return str;
}
wstring string2wstring(const string & str)
{
wstring wstr(str.length(),L’ ‘);
copy(str.begin(),str.end(),wstr.begin());
return wstr;
}
http://agraja.wordpress.com/2008/09/08/cpp-string-wstring-conversion/
標準編碼實踐注意事項:當按值傳遞參數時,您爲每個字符串創建一個額外副本 - 而不是通過const引用傳遞它們。 – 2009-12-26 04:45:19
很好趕上尼古拉,我會更新 – 2009-12-26 05:08:27
由於這是搜索「C++窄字符串」的第一個結果之一,它來自C++ 11之前,這裏是解決此問題的C++ 11方法:
#include <codecvt>
#include <locale>
#include <string>
std::string narrow(const std::wstring& str){
std::wstring_convert<
std::codecvt_utf8_utf16<std::wstring::value_type>,
std::wstring::value_type
> utf16conv;
return utf16conv.to_bytes(str);
}
std::wstring_convert
:http://en.cppreference.com/w/cpp/locale/wstring_convertstd::codecvt_utf8_utf16
:http://en.cppreference.com/w/cpp/locale/codecvt_utf8_utf16
- 1. 寬窄
- 2. 將窄字符串轉換爲寬字符串
- 3. 在寬數據上使用窄字符串操作函數
- 4. 窄換行符
- 5. ICS渲染寬度較窄的webview
- 6. Python 3中的Unicode字符串仍然依賴於「窄」/「寬」構建?
- 7. 無法將寬字符分配到寬字符字段。
- 8. C字符串到寬C字符串
- 9. 在窄列內攜帶寬項目
- 10. Rmarkdown HTML矩陣輸出寬度太窄
- 11. UITableViewCell寬度太窄(以分組風格)
- 12. 寬度變化與窄屏幕尺寸
- 13. jQuery手機(phonegap)內容寬度太窄
- 14. 插入窄字符串到std :: basic_ostream <wchar_t>
- 15. Zsh COLUMNS設置爲比例寬度字體太窄
- 16. 無符號字符數組到寬字符數組/字符串
- 17. 寬字符到多字節問題
- 18. Pantheios寬字符?
- 19. 寬字符Windows
- 20. 開羅,得到等寬的拉丁字符表面的寬度
- 21. 防止CSS從窄屏幕
- 22. 從「字符*」到「字符」
- 23. 等寬字符的像素寬度
- 24. 在Entity Framework中映射到一個表的實體的寬版和窄版
- 25. 狹窄的WebView中的視口寬度自適應
- 26. 的swprintf()窄弦
- 27. 寬字符字符串字面值
- 28. 打到寬字符後截斷文件
- 29. UTF-8到寬字符轉換
- 30. Boost.format和寬字符
這取決於你想要做什麼樣的轉換。很明顯,ASCII中存在的字符可以很容易地縮小,但'char'所使用的字符集中不存在的字符怎麼辦?還是有不同的編碼?你關心這些嗎?基本上,你想*正確*轉換,或只是適用於英文字符的東西? – jalf 2009-12-22 13:08:01
在這種特殊情況下,假設所有讀取的字符都是窄格式是安全的。我正在閱讀的文件中只包含窄字符,但我試圖通過返回寬字符串的接口返回此信息。然而,對於更多案例的完整答案將是非常豐富的。 – DanDan 2009-12-31 15:21:36
另外,當我寫出他的文件時,我必須把我的字符串變成窄字符。在這種情況下,我可能不得不去尋找普通的方形顯示字符。 – DanDan 2009-12-31 15:23:49