【发布时间】:2013-03-25 08:42:00
【问题描述】:
我的代码中有一个宽字符 (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'ф'; 可以协同工作。
但是一样
wchar_t w;
wcin >> w;
wcout << w;
工作不正确。
这很奇怪。早些时候,我使用 setlocale() 对编码没有任何问题。
【问题讨论】:
-
我想这不能直接正确完成,这个功能会派上用场:msdn.microsoft.com/en-us/library/windows/desktop/…
-
为什么?
basic_string::find()使用 charT,即 wstring 的情况 - 使用 wcahr_t。 `L'ф' 是 wchar_t,不是吗?