sha*_*ote 5 c++ stl wstring setlocale
我的代码中有一个宽字符串(std :: wstring),我需要在其中搜索宽字符.
我使用find()函数:
    wcin >> str;
    wcout << ((str.find(L'?') != wstring::npos)? L"EXIST":L"NONE");
L'?' 是一封西里尔字母.
但是同一个调用中的find()总会返回npos.在拉丁字母的情况下,find()可以正常工作.
这是这个功能的问题吗?或者我做错了什么?
UPD
我使用MinGW并以UTF-8保存源代码.我也设置了语言环境setlocale(LC_ALL, "");.代码相同的wcout << L'?';工作是coorectly.但同样的
wchar_t w;
wcin >> w;
wcout << w;
工作不正确.
它很奇怪.之前我使用setlocale()编码没有问题.
源文件的编码和执行环境的编码可能有很大不同。C++ 对此不做任何保证。您可以通过输出字符串文字的十六进制值来检查这一点:
\n\nstd::wcout << std::hex << L"\xd1\x84";\n在 C++11 之前,您可以通过使用十六进制值在源代码中使用非 ASCII 字符:
\n\n"\\x05" "five"\nC++11 添加了指定其 Unicode 值的能力,在您的情况下是
\n\nL"\\u03A6"\n如果您要使用完整的 C++11(并且您的环境确保它们以 UTF-* 编码),您可以使用char、char16_t、 或中的任何一个char32_t,然后执行以下操作:
const char* phi_utf8 = "\\u03A6";\nconst char16_t* phi_utf16 = u"\\u03A6";\nconst char32_t* phi_utf16 = U"\\u03A6";\n| 归档时间: | 
 | 
| 查看次数: | 773 次 | 
| 最近记录: |