问题是如何将wstring转换为字符串?
我有下一个例子:
#include <string>
#include <iostream>
int main()
{
std::wstring ws = L"Hello";
std::string s( ws.begin(), ws.end() );
//std::cout <<"std::string = "<<s<<std::endl;
std::wcout<<"std::wstring = "<<ws<<std::endl;
std::cout <<"std::string = "<<s<<std::endl;
}
Run Code Online (Sandbox Code Playgroud)
注释掉的输出是:
std::string = Hello
std::wstring = Hello
std::string = Hello
Run Code Online (Sandbox Code Playgroud)
但不仅仅是:
std::wstring = Hello
Run Code Online (Sandbox Code Playgroud)
这个例子有什么不对吗?我可以像上面那样进行转换吗?
编辑
新的例子(考虑到一些答案)是
#include <string>
#include <iostream>
#include <sstream>
#include <locale>
int main()
{
setlocale(LC_CTYPE, "");
const std::wstring ws = L"Hello";
const std::string s( ws.begin(), ws.end() );
std::cout<<"std::string = "<<s<<std::endl;
std::wcout<<"std::wstring = "<<ws<<std::endl;
std::stringstream ss;
ss …Run Code Online (Sandbox Code Playgroud) 我的std :: string是utf-8编码所以很明显,str.length()返回错误的结果.
我发现了这些信息,但我不确定如何使用它来执行此操作:
以下字节序列用于表示字符.要使用的序列取决于字符的UCS代码编号:
Run Code Online (Sandbox Code Playgroud)0x00000000 - 0x0000007F: 0xxxxxxx 0x00000080 - 0x000007FF: 110xxxxx 10xxxxxx 0x00000800 - 0x0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx 0x00010000 - 0x001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
如何找到UTF-8编码的std :: string的实际长度?谢谢
我需要获取std :: string中前N个字符的子字符串,假定为utf8.我学到了.substr不起作用的艰难方式......正如......期待的那样.
参考:我的字符串可能如下所示:任务:\n \n1亿2千万匹