将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. ICS渲染宽度较窄的webview
- 4. Python 3中的Unicode字符串仍然依赖于“窄”/“宽”构建?
- 5. jQuery手机(phonegap)内容宽度太窄
- 6. 宽度变化与窄屏幕尺寸
- 7. 在窄列内携带宽项目
- 8. Zsh COLUMNS设置为比例宽度字体太窄
- 9. 无符号字符数组到宽字符数组/字符串
- 10. 宽字符到多字节问题
- 11. 开罗,得到等宽的拉丁字符表面的宽度
- 12. 从“字符*”到“字符”
- 13. 防止CSS从窄屏幕
- 14. 等宽字符的像素宽度
- 15. 在Entity Framework中映射到一个表的实体的宽版和窄版
- 16. 宽字符字符串字面值
- 17. Boost.format和宽字符
- 18. sIFR字母窄于原始字体
- 19. 窄或宽型?什么在我的公开API返回
- 20. 扩展(宽)或窄的标题在SSRS列出他们2008年
- 21. 将字符转换为宽字符
- 22. 窄铸造int到更小的类型
- 23. 获取字体的字符宽度
- 24. 获取字符从字符串列表索引到的字符
- 25. SAS:将窄数据集转换为宽数据集
- 26. 如何在窄视口上制作导航栏全宽?
- 27. 主要页面宽度100%宽度和其他宽度(输入表单)的窄轨道布局
- 28. 从字符串中提取适合特定宽度的字符串
- 29. C:从多字节字符串中选择一个子字符串,n列宽
- 30. MIME Base64编码宽字符
这取决于你想要做什么样的转换。很明显,ASCII中存在的字符可以很容易地缩小,但'char'所使用的字符集中不存在的字符怎么办?还是有不同的编码?你关心这些吗?基本上,你想*正确*转换,或只是适用于英文字符的东西? – jalf 2009-12-22 13:08:01
在这种特殊情况下,假设所有读取的字符都是窄格式是安全的。我正在阅读的文件中只包含窄字符,但我试图通过返回宽字符串的接口返回此信息。然而,对于更多案例的完整答案将是非常丰富的。 – DanDan 2009-12-31 15:21:36
另外,当我写出他的文件时,我必须把我的字符串变成窄字符。在这种情况下,我可能不得不去寻找普通的方形显示字符。 – DanDan 2009-12-31 15:23:49