【发布时间】:2017-06-27 11:23:01
【问题描述】:
如果不知道输入的locale 是哪个locale,那么推荐的读取某些可能包含特殊字符(例如重音)的用户输入的方法是什么。
如何安全地比较这个用户输入的一个字符,如果它是一个特殊的字符,我需要以某种方式处理?
这是说明意图的示例代码:
#include <iostream>
using namespace std;
int main() {
char txt[10];
cin.getline(txt, sizeof(txt));
if(txt[0] == 'á')
cout << "Special character found\n";
}
问题是:
warning: multi-character character constant [-Wmultichar]
if(txt[0] == 'á')
^
如果我使用L'á' 作为宽字符文字,那么它将不匹配,因为输入不是宽字符。
如果我也使用wchar_t 和wcin.getline 来获取宽字符的用户输入,那么它可能适用于某些系统,但可能不适用于其他系统,具体取决于环境和区域设置。
如何安全、便携地解决这个问题?谢谢!
【问题讨论】:
-
您可能需要考虑使用像ICU这样的unicode库
-
最好的方法,还是我们最喜欢的?我在内部使用 UTF8 进展顺利,在 Windows 中,我必须来回转换为 UTF-16 以进行 UI 显示和输入,但这是值得的。我专门使用
boost::locale::conv::utf_to_utf进行转换。
标签: c++ utf-8 locale non-ascii-characters wchar-t