标签: wstring

std :: wstring VS std :: string

我无法理解之间的差异std::stringstd::wstring.我知道wstring支持Unicode字符等宽字符.我有以下问题:

  1. 我什么时候应该std::wstring用完std::string
  2. 可以std::string保存整个ASCII字符集,包括特殊字符吗?
  3. std::wstring由所有流行的C++编译器的支持?
  4. 什么是" 广角 "?

c++ string unicode c++-faq wstring

716
推荐指数
7
解决办法
29万
查看次数

如何将wstring转换为字符串?

问题是如何将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)

c++ unicode stl wstring

191
推荐指数
13
解决办法
26万
查看次数

C++将字符串(或char*)转换为wstring(或wchar_t*)

string s = "????";
wstring ws = FUNCTION(s, ws);
Run Code Online (Sandbox Code Playgroud)

我如何将s的内容分配给ws?

搜索谷歌并使用了一些技术,但他们无法分配确切的内容.内容失真.

c++ string wstring

157
推荐指数
11
解决办法
24万
查看次数

C++ wchar_t和wstrings有什么"错误"?宽角色有哪些替代方案?

我见过C++社区中的很多人(特别是freenode上的## c ++)对windows api 的使用wstrings和使用感到不满wchar_t.究竟是什么"错误"有wchar_twstring,如果我要支持国际化,有一些什么替代宽字符?

c++ unicode winapi internationalization wstring

81
推荐指数
2
解决办法
3万
查看次数

不区分大小写的std :: string.find()

我正在使用std::stringfind()方法来测试字符串是否是另一个字符串的子字符串.现在我需要不区分大小写的同一件事.对于字符串比较,我总是可以转向,stricmp()但似乎没有stristr().

我找到了各种答案,大多数建议使用Boost哪个不是我的选择.另外,我需要支持std::wstring/ wchar_t.有任何想法吗?

c++ string stl case-insensitive wstring

58
推荐指数
5
解决办法
9万
查看次数

如何初始化和打印std :: wstring?

我有代码:

std::string st = "SomeText";
...
std::cout << st;
Run Code Online (Sandbox Code Playgroud)

这工作得很好.但现在我的团队想要搬到wstring.所以我尝试过:

std::wstring st = "SomeText";
...
std::cout << st;
Run Code Online (Sandbox Code Playgroud)

但这给了我一个编译错误:

错误1错误C2664:'std :: basic_string <_Elem,_Traits,_Ax> :: basic_string(const std :: basic_string <_Elem,_Traits,_Ax>&)':无法将参数1从'const char [8]'转换为'const std :: basic_string <_Elem,_Traits,_Ax>&'D:...\TestModule1.cpp 28 1 TestModule1

在搜索网络后,我读到我应该将其定义为:

std::wstring st = L"SomeText"; // Notice the "L"
...
std::cout << st;
Run Code Online (Sandbox Code Playgroud)

这个编译但打印"0000000000012342"而不是"SomeText".

我究竟做错了什么 ?

c++ c++-cli wstring

51
推荐指数
4
解决办法
6万
查看次数

将Unicode UTF-8文件读入wstring

如何wstring在Windows平台上读取(UTF-8)文件?

c++ unicode file utf-8 wstring

37
推荐指数
5
解决办法
6万
查看次数

在C++下处理Unicode字符串的最佳多平台方式是什么?

我知道已经有StackOverflow上有关的几个问题std::stringstd::wstring或类似,但没有人提出了一个完整的解决方案.

为了获得一个好的答案,我应该定义要求:

  • 多平台使用,必须适用于Windows,OS X和Linux
  • 最小的努力用于转换到/从平台特定的Unicode字符串CFStringRef,wchar_t *,char*为UTF-8或其他类型的,因为它们是由OS API必需的.备注:我不需要代码页转换支持,因为我希望在所有支持的操作系统上只使用Unicode兼容的函数.
  • 如果需要一个外部库,这个应该是开源的,并且在非常自由的许可下,如BSD但不是LGPL.
  • 能够使用printf格式语法或类似.
  • 简单的字符串分配/释放方式
  • 性能不是很重要,因为我假设Unicode字符串仅用于应用程序UI.
  • 一些例子可能会受到赞赏

我非常感谢每个答案提出一个解决方案,通过这样做,人们可以投票选择他们喜欢的替代方案.如果您有多个替代方案,请添加另一个答案.

请说明一些对你有用的东西.

相关问题:

c++ string unicode multiplatform wstring

19
推荐指数
2
解决办法
1785
查看次数

如何在C++中将std :: wstring转换为LPCTSTR?

我有wstring格式的Windows注册表键值.现在我想将它传递给这个代码(第一个参数 - javaw.exe的路径):

std::wstring somePath(L"....\\bin\\javaw.exe");

    if (!CreateProcess("C:\\Program Files\\Java\\jre7\\bin\\javaw.exe", <--- here should be LPCTSTR, but I have a somePath in wstring format..
            cmdline, // Command line.
            NULL, // Process handle not inheritable.
            NULL, // Thread handle not inheritable.
            0, // Set handle inheritance to FALSE.
            CREATE_NO_WINDOW, // ON VISTA/WIN7, THIS CREATES NO WINDOW
            NULL, // Use parent's environment block.
            NULL, // Use parent's starting directory.
            &si, // Pointer to STARTUPINFO structure.
            &pi)) // Pointer to PROCESS_INFORMATION structure.
    {
        printf("CreateProcess …
Run Code Online (Sandbox Code Playgroud)

c++ string type-conversion wstring

19
推荐指数
2
解决办法
3万
查看次数

如何将std :: wstring写入文件?

我有一个wstring声明如此:

// random wstring
std::wstring str = L"abcàdëefŸg€hhhhhhhµa";
Run Code Online (Sandbox Code Playgroud)

文字将是UTF-8编码,因为我的源文件是.

[编辑:根据Mark Ransom,情况不一定如此,编译器将决定使用什么编码 - 让我们假设我从例如UTF-8编码的文件中读取此字符串]

我非常希望将其转换为文件读取(当文本编辑器设置为正确的编码时)

abcàdëefŸg€hhhhhhhµa
Run Code Online (Sandbox Code Playgroud)

但是ofstream不是很合作(拒绝接受wstring参数),并且wofstream据说需要知道语言环境和编码设置.我只想输出这组字节.通常如何做到这一点?

编辑:它必须是跨平台的,不应该依赖于UTF-8编码.我碰巧有一组存储在a中的字节wstring,并希望输出它们.它很可能是UTF-16或纯ASCII.

c++ unicode file wstring wofstream

18
推荐指数
5
解决办法
3万
查看次数